【问题标题】:wxpython textctrl disappears while processing datawxpython textctrl在处理数据时消失
【发布时间】:2013-08-06 18:18:31
【问题描述】:

我有一个非常奇怪的问题,我一直在尝试解决一段时间,但没有任何运气。

我的程序由一个主框架、一个菜单栏组成,菜单栏下方是一个处于只读模式的文本控件,其下方是一个状态栏。

在我的主要课程中,我有许多功能,下面列出了一个。在菜单事件上,调用与该菜单事件关联的函数。下面的函数应该将要处理的文件的名称打印到 textctrl,然后应该处理该文件,然后移动到要打印到 textctrl 的下一个文件,然后处理该文件等...

在处理所有文件时,文本控制框和状态栏会完全消失。处理完成后,它会重新出现并打印所有文本。

我不确定它为什么会消失。我以多种不同的方式在函数中移动了代码以尝试解决问题,但无济于事。

任何帮助将不胜感激。

---编辑--- 代码已删除

【问题讨论】:

    标签: python wxpython textctrl


    【解决方案1】:

    听起来正在发生的事情是您的进程正忙于工作,因此它不会放弃任何周期让 GUI 刷新。

    您需要做的是将繁忙的进程移到它自己的线程中。

    你会想做类似的事情

    import threading
    
    class Encrypt(threading.Thread):
        def __init__(self, threadNum, asset, window):
            threading.Thread.__init__(self)
            self.threadNum = threadNum
            self.window = window
            self.signal = True
    
        def run(self):
            while self.signal:
                do_stuff_that_is_cpu_intensive
                for self.path in self.paths: #etc..
    

    在你的主 wx.Frame 类中:

    class Frame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(Frame, self).__init__(*args, **kwargs)
    
        self.InitUI()
        self.Show()
        self.count = 0 # simple thread counter. 
        self.threads = [] # this lets you iterate over your threads if you ever need to
    
    def OnEncrypt(self):
        self.count += 1
        thread = Encrypt(self.count, asset, self)
        self.threads.append(thread)
        thread.start()
    

    在这里查看更详细的方法和解释:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

    【讨论】:

    • 您好 multiphrenic,谢谢。它看起来正是我需要做的来解决我的问题。我会在接下来的一天左右玩这个。我对编程和 python 还是很陌生,所以可能需要一段时间。克林顿。
    • 别担心,不久前我和你在同一条船上。它很快就会有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多