【发布时间】:2011-10-18 22:16:10
【问题描述】:
所以我创建了一个类,其中包含使用 wxPython 的 GUI。 如何让它每分钟刷新一次?
【问题讨论】:
标签: python user-interface wxpython refresh reload
所以我创建了一个类,其中包含使用 wxPython 的 GUI。 如何让它每分钟刷新一次?
【问题讨论】:
标签: python user-interface wxpython refresh reload
对于间隔发生的事情,请使用Timer。来自WxPyWiki:
def on_timer(event):
pass # do whatever
TIMER_ID = 100 # pick a number
timer = wx.Timer(panel, TIMER_ID) # message will be sent to the panel
timer.Start(100) # x100 milliseconds
wx.EVT_TIMER(panel, TIMER_ID, on_timer) # call the on_timer function
由于某种原因,我尝试此代码时不起作用。原因是计时器必须是班级成员。如果您将该代码放入 init() 方法并添加 self.在计时器之前,它应该可以工作。如果没有,请尝试使 on_timer() 也成为类成员。 ——巴勃罗·安东尼奥
当定时器运行时,我在关闭框架时遇到问题。
我是这样处理的:
def on_close(event):
timer.Stop()
frame.Destroy()
wx.EVT_CLOSE(frame, on_close)
【讨论】:
我不使用 wxPython,但如果有一个名为 refresh 或类似名称的方法,您可以启动一个线程每分钟调用该方法。
from threading import Thread
from time import sleep
def refreshApp(app, timespan):
while app.isRunning:
app.refresh()
sleep(timespan)
refresher = Thread(target=worker, args=(myAppInstance, 60))
refresher.start()
编辑:固定代码使其适合 PEP8
【讨论】:
target=worker。我确定这是@MattJ 所指的对齐间距。此外,通常人们只在必要时使用尾随逗号。他也可能不喜欢您使用非描述性名称,例如 t 和 worker,或者在 60 可以使用时使用 60.。
60。我认为,target = worker 也更清楚。但我会修复代码,使其适合 PEP8
正如 Niklas 建议的那样,我认为您正在寻找 Refresh() 方法:http://wxpython.org/docs/api/wx.Window-class.html#Refresh。
【讨论】:
Refresh 只是强制重绘窗口的一部分。仍然需要调用Refresh“偶尔”...