wxPython会话超时

时间:2014-12-02 15:50:17

标签: python session wxpython

我有一个用wxPython创建的中型桌面应用程序。我想在此应用程序中实现session工具。在一段时间不活动后,应用程序应该将用户注销并自动显示登录屏幕。在wxPython中完成此任务的最佳方式是什么?

该应用程序在wxPython 2.8.12.1内使用Python 2.7 Windows 8, 7, XP

编辑1

EVT_MOTION绑定到wx.Framewx.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()

1 个答案:

答案 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()