在屏幕加载wxpython之后启动方法



我对python/wxpython越来越熟悉了。我已经为面板/网格创建了一个类。但我想"绘制"网格,只有在加载/显示所有内容后,我才想开始运行一个方法/函数来计算Windows中正在运行的进程。代码片段:

self.sb.SetStatusText('Initialising application...')
self.SetTitle('Computer Check v0.1')
self.Centre()
self.Show()
self.onStart()
def onStart(self):
self.sb.SetStatusText('Counting processes')     
count = 0
for process in c.Win32_Process():
count +=1
self.sb.SetStatusText('Found '+str(count)+' running processes')

但事情似乎在快速发展,这意味着应用程序正在绘制中,"onstart(("已经在运行。。。

另一件事是应用程序在onstart((过程中"挂起",使用WMI似乎相当繁重。。。或者可能代码在我这边只是垃圾;-(

加载应用程序后,找不到用于启动onstart的事件。如何以正确的方式做到这一点?

谢谢!

您可以使用wx。CallAfter在wx事件循环"有空闲时间"或wx时运行可调用。CallLater在一段时间后运行一些东西。

wx.CallAfter(self.onStart)

我不知道Win32_Process是否需要很长时间,如果需要,它肯定会阻塞UI。最好的方法是启动一个新线程来执行计算(Win32_Process(,然后例如wx。CallAfter以更新UI。请记住,您可能不会从其他线程更新UI。

当你的线程计算值时,你可以例如

def thread_run_function(self):
# perform the calculation...
wx.CallAfter(self.update_ui, calculated_value)
def update_ui(self, calculated_value):
self.some_widget.SetLabel("Value: %s" % calculated_value)

或者:

def thread_run_function(self):
# perform the calculation...
self.calculated_value = calculated_value
wx.CallAfter(self.update_ui)
def update_ui(self):
self.some_widget.SetLabel("Value: %s" % self.calculated_value)

最新更新