我不是一个有经验的程序员。这可能是一个简单的问题要解决。在
我有一个每两分钟运行一次的函数。此函数位于一个简单的wxPython系统托盘程序中。问题是我不知道如何运行函数,因为wxPython从不离开.MainLoop()。我应该把函数放在哪里?在
代码如下:(我省略了函数和import,因为它不相关。)
TRAY_TOOLTIP = 'System Tray Demo'
TRAY_ICON = 'star.png'
def create_menu_item(menu, label, func):
item = wx.MenuItem(menu, -1, label)
menu.Bind(wx.EVT_MENU, func, id=item.GetId())
menu.appendItem(item)
return item
class TaskBarIcon(wx.TaskBarIcon):
def __init__(self):
super(TaskBarIcon, self).__init__()
self.set_icon(TRAY_ICON)
self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)
def CreatePopupMenu(self):
menu = wx.Menu()
create_menu_item(menu, 'Say Hello', self.on_hello)
menu.AppendSeparator()
create_menu_item(menu, 'Exit', self.on_exit)
return menu
def set_icon(self, path):
icon = wx.IconFromBitmap(wx.Bitmap(path))
self.SetIcon(icon, TRAY_TOOLTIP)
def on_left_down(self, event):
print 'Tray icon was left-clicked.'
MailCheck()
def on_hello(self, event):
print 'Hello, world!'
def on_exit(self, event):
wx.CallAfter(self.Destroy)
def main():
app = wx.PySimpleApp()
TaskBarIcon()
app.MainLoop()
#This is my function I want to run
#But MainLoop() never ends. Where should I put MainCheck() ?
MailCheck()
if __name__=='__main__':
main()
我从未使用过wxPython,但您可以使用Python标准库的线程模块。在
一个最小的例子:
看看这个线程(示例是从那里开始的):Periodically execute function in thread in real time, every N seconds
wxPython与大多数GUI框架一样,使用事件驱动的编程模型。这意味着你的程序的一部分运行是为了响应可能来自用户的操作(如按键、菜单选择等)、系统或其他程序。剩下的时间它会在主循环中等待其中一个事件发生。在
对于像你这样的情况wx定时器类,该类可以在N毫秒后触发一次或周期性地触发事件。如果绑定计时器事件的事件处理程序,则在计时器过期时将调用该处理程序。在
相关问题 更多 >
编程相关推荐