1

I want to set value into sheet using thread.

import time
import wx
from wx.lib import sheet
from threading import Thread

EVT_RESULT_ID = wx.NewId()

def EVT_RESULT(win, func):

    win.Connect(-1, -1, EVT_RESULT_ID, func)

class ResultEvent(wx.PyEvent):

    def __init__(self, data):

        wx.PyEvent.__init__(self)
        self.SetEventType(EVT_RESULT_ID)
        self.data = data

class TestThread(Thread):

    def __init__(self, wxObject,sheet):


        Thread.__init__(self)
        self.wxObject = wxObject
        self.sheet=sheet
        self.start()
    def run(self):

        self.sheet.sheetload()
        wx.PostEvent(self.wxObject, ResultEvent(self.sheet))


class MySheet(sheet.CSheet):

    def __init__(self, parent):
        sheet.CSheet.__init__(self, parent)
        self.SetNumberRows(100)
        self.SetNumberCols(30)

    def sheetload(self):
        self.SetNumberRows(200)
        self.SetNumberCols(30)
        self.EnableEditing(False)

        for i in range(200):
            for j in range(30):
                self.SetCellValue(i,j,str(i))



class Newt(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None,-1, "Tutorial")


        self.box = wx.BoxSizer(wx.VERTICAL)
        toolbar2 = wx.ToolBar(self, wx.TB_HORIZONTAL | wx.TB_TEXT,size = (1000, 40))
        self.show_btn =wx.Button(toolbar2, label="show")
        self.show_btn.Enable(True)
        self.Bind(wx.EVT_BUTTON, self.onShow,self.show_btn)
        toolbar2.AddControl(self.show_btn)
        self.box.Add((5,5) , 0)
        self.box.Add(toolbar2)
        self.box.Add((5,10) , 0)

        toolbar2.Realize()


        self.notebook = wx.Notebook(self, -1, style=wx.RIGHT)

        self.box.Add(self.notebook, 1, wx.EXPAND)


        self.Maximize(True)
        self.SetSizer(self.box)
        EVT_RESULT(self, self.updateDisplay)

    def onShow(self, event):
        sheet=MySheet(self.notebook)
        TestThread(self,sheet)

    def updateDisplay(self, msg):

        t = msg.data
        self.notebook.AddPage(t,"Logs")




app = wx.PySimpleApp()
frame = Newt().Show()
app.MainLoop()

Here I am using sheetload function defined in Mysheet to execute in TestThread. So i can set value into sheet in background without blocking main gui.

But i am getting this error, and my gui is crashing.

(python2.7:10775): GLib-CRITICAL **: Source ID 559 was not found when attempting to remove it

can you help me, what is wrong with this code.

Sanjay Jain
  • 651
  • 1
  • 8
  • 10
  • Must be something about your environment, your code does not "crash" under linux (Mint 17.2) – Rolf of Saxony Sep 18 '15 at 09:16
  • 1
    I tried your code under windows 7 and Debian 8 (gnome), it does not crush. Try calling self.sheet.sheetload() within main thread instead of child. – Ozan Sep 22 '15 at 09:10

0 Answers0