我有一个用wxPython
创建的中型桌面应用程序。我想在此应用程序中实现session
工具。在一段时间不活动后,应用程序应该将用户注销并自动显示登录屏幕。在wxPython
中完成此任务的最佳方式是什么?
该应用程序在wxPython 2.8.12.1
内使用Python 2.7
Windows 8, 7, XP
。
编辑1
将EVT_MOTION
绑定到wx.Frame
和wx.Panel
无法正常工作。如果我将EVT_MOTION
绑定到所有单个对象,它就会起作用。有没有办法让事件冒泡到最外层的父(wx.Frame
)?
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Checking EVT_MOTION with Frame")
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(sizer)
sizer.Add(wx.Button(panel, -1, "Button 1"), 1, wx.EXPAND)
sizer.Add(wx.Button(panel, -1, "Button 2"), 1, wx.EXPAND)
sizer.Add(wx.Button(panel, -1, "Button 3"), 1, wx.EXPAND)
self.Bind(event=wx.EVT_MOTION, handler=self.OnMotion)
self.Show()
def OnMotion(self, event):
print "EVT_MOTION: " + str(event.GetEventObject())
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
答案 0 :(得分:0)
我会使用wx.Timer。每次用户移动鼠标(wx.EVT_MOTION)或按下某个键(wx.EVT_KEY_DOWN)时,您都可以重新启动它。我写了一篇关于使用wx.Timers的教程,你可能会觉得有用:
以下是该教程中实现超级简单wx.Timer的示例之一:
import wx
import time
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Timer Tutorial 1",
size=(500,500))
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.update, self.timer)
self.toggleBtn = wx.Button(panel, wx.ID_ANY, "Start")
self.toggleBtn.Bind(wx.EVT_BUTTON, self.onToggle)
def onToggle(self, event):
btnLabel = self.toggleBtn.GetLabel()
if btnLabel == "Start":
print "starting timer..."
self.timer.Start(1000)
self.toggleBtn.SetLabel("Stop")
else:
print "timer stopped!"
self.timer.Stop()
self.toggleBtn.SetLabel("Start")
def update(self, event):
print "\nupdated: ",
print time.ctime()
# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()