wxPython:在线程中将值设置为Sheet

时间:2015-09-16 14:06:35

标签: python-2.7 wxpython wxnotebook

我想使用线程将值设置为表格。

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()

这里我使用Mysheet中定义的sheetload函数在TestThread中执行。所以我可以在背景中将值设置为表格而不会阻止主gui。

但是我收到了这个错误,我的gui正在崩溃。

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

你可以帮助我吗,这段代码出了什么问题。

0 个答案:

没有答案