鱼C论坛

 找回密码
 立即注册
查看: 4117|回复: 2

[已解决]Python图形界面刷新

[复制链接]
发表于 2016-5-18 15:10:55 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 舒方 于 2016-5-25 13:15 编辑

wxpython  使用多线程之后还是未响应

queue = Queue.Queue()
infoGripper = InfoGripper()
class WorkerThread(threading.Thread):
    """
    This just simulates some long-running task that periodically sends
    a message to the GUI thread.
    """
   
   
    def __init__(self, queue,threadNum,startpg,endpg,windows):
        threading.Thread.__init__(self)
        self.threadNum = threadNum
        self.queue = queue
        self.window = windows
        self.startpg = startpg
        self.endpg= endpg

    def stop(self):
        self.timeToQuit.set()

    def run(self):
        max_SQLdate = infoGripper.CX_maxDate()
        sql = 'insert into Fi values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
        while  True:
            data = self.queue.get()
            page = str(int(data.split("=")[-1])/10+1)
            print page
            pub.sendMessage("update", message=page)
            wx.CallAfter(pub.sendMessage, "update",message=page)
            time.sleep(5)
            #wx.CallAfter(self.window.updateDisplay,page)
            #采集数据
            #infos = infoGripper.get_info(data)
            #infoGripper.SaveSQL(infos,sql,max_SQLdate)
        #wx.CallAfter(self.window.updateDisplay, u"采集完")


   


                        

class MyFrame(wx.Frame):
    def __init__(self):
        font = wx.Font(10, wx.DECORATIVE, wx.NORMAL, wx.NORMAL)
        wx.Frame.__init__(self, None,-1,u'采集',size=(500, 450))

        

        panel = wx.Panel(self, -1)
        Rbox = wx.BoxSizer(wx.VERTICAL)  #纵向box
        
        Cbox0 = wx.BoxSizer(wx.HORIZONTAL)  #横向box
        start_lable = wx.StaticText(panel,-1,u"起始页:",size=(80,30),style =wx.ALIGN_CENTER)
        Cbox0.Add(start_lable,proportion = 0,flag =wx.LEFT,border = 100)
        self.E1 = wx.TextCtrl(panel,-1,size=(200,30))
        Cbox0.Add(self.E1,proportion = 3,flag =wx.LEFT,border = 10)
        Rbox.Add(Cbox0,flag = wx.TOP,border = 50)

        Cbox1 = wx.BoxSizer(wx.HORIZONTAL)
        end_lable = wx.StaticText(panel,-1,u"尾页:",size=(80,30),style =wx.ALIGN_CENTER)
        Cbox1.Add(end_lable,proportion = 0,flag =wx.LEFT,border = 100)
        self.E2 = wx.TextCtrl(panel,-1,size=(200,30))
        Cbox1.Add(self.E2,proportion = 3,flag =wx.LEFT,border = 10)
        Rbox.Add(Cbox1,flag = wx.TOP,border = 20)
        start_lable.SetFont(font)
        end_lable.SetFont(font)

        Cbox4 = wx.BoxSizer(wx.HORIZONTAL)
        list0 = []
        choices = wx.Choice(panel,-1,(90,18),choices= list0)
        Cbox4.Add(choices,proportion = 0,flag =wx.TOP,border = 20)
        Rbox.Add(Cbox4,flag = wx.LEFT,border = 200)

        Cbox3 = wx.BoxSizer(wx.HORIZONTAL)
        self.jindu = wx.StaticText(panel,-1,u"进度:",style =wx.ALIGN_CENTER)
        Cbox3.Add(self.jindu,proportion = 0,flag =wx.TOP,border = 10)
        Rbox.Add(Cbox3,flag = wx.BOTTOM|wx.ALIGN_RIGHT|wx.RIGHT,border = 60)



        Cbox2 = wx.BoxSizer(wx.HORIZONTAL)
        CJbutton = wx.Button(panel, label=u"采集", size=(55, 40))
        Cbox2.Add(CJbutton,proportion = 0,flag =wx.TOP,border = 20)
        QXbutton = wx.Button(panel, label="Close",  size=(55, 40))
        Cbox2.Add(QXbutton,proportion = 0,flag =wx.TOP,border = 20)
        Rbox.Add(Cbox2,flag = wx.BOTTOM|wx.ALIGN_RIGHT|wx.RIGHT,border = 20)

        #绑定事件
        self.Bind(wx.EVT_BUTTON, self.onButton, CJbutton)

        panel.SetSizer(Rbox)
        self.Centre()
        self.Show(True)

        pub.subscribe(self.updateDisplay, "update")

    def onButton(self,evt):
        page = self.get_e(self.E1,self.E2)
        startpage = page[0]
        self.endpage = page[1]
        num= 1
        for i in range(num):
            t = WorkerThread(queue,num,startpage,self.endpage,self)
            t.setDaemon(True)
            t.start()
        for page in range(startpage,self.endpage):
            m = str(page*10)
            data = 'limit=10&start='+m
            queue.put(data)
        queue.join()

        self.dhk()
app = wx.PySimpleApp()
frm = MyFrame()
frm.Show()
app.MainLoop()
最佳答案
2016-5-18 15:10:56
论坛里面学习pyqt和tkinter的比较多,wxpython的比较少。

最佳答案

查看完整内容

论坛里面学习pyqt和tkinter的比较多,wxpython的比较少。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-18 15:10:56 | 显示全部楼层    本楼为最佳答案   
论坛里面学习pyqt和tkinter的比较多,wxpython的比较少。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-6-14 11:18:00 | 显示全部楼层
~风介~ 发表于 2016-6-2 21:36
论坛里面学习pyqt和tkinter的比较多,wxpython的比较少。

tkinter不能做多线程,容易卡死
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-21 02:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表