wxPython 中带有自动关闭计时器的 wxMessageBox
平台:Windows、OS X
Python 版本:Active State Python 2.7
wxPython 版本:版本 2.9
是我使用 wxMessageBox 的示例代码:
import wx,os
class Frame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(100, 100),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
host=os.system('hostname')
if host!='superman':
self.dialogBox=wx.MessageBox('The host name should be superman. Closing this dialog box in 2s...','Info')
self.Destroy()
else:
self.Center()
self.Show()
if __name__ == '__main__':
app = wx.App(redirect=False)
frame = Frame(None, -1, 'Sample')
app.MainLoop()
下面 代码,如果主机名不是 'superman' ,则会显示一个消息框并提示用户按“确定”。如果用户按下消息框中的“确定”按钮,则控件将移动到代码中的下一行(即第 10 行),帧将在此处被销毁。如果用户在接下来的 2 行中没有按“确定”按钮,我希望能够自动关闭对话框并转到代码中的下一行,即 self.Destroy()
秒。关于如何在 wxpython 中做到这一点有什么想法吗?
Platforms: Windows, OS X
Python Version: Active State Python 2.7
wxPython Version: Version 2.9
Here is a sample code in which I use a wxMessageBox:
import wx,os
class Frame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(100, 100),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
host=os.system('hostname')
if host!='superman':
self.dialogBox=wx.MessageBox('The host name should be superman. Closing this dialog box in 2s...','Info')
self.Destroy()
else:
self.Center()
self.Show()
if __name__ == '__main__':
app = wx.App(redirect=False)
frame = Frame(None, -1, 'Sample')
app.MainLoop()
According to the above piece of code, If the host name is not 'superman' , then the user is displayed a message box and prompted to press 'OK'. If the user presses 'OK' button on the message box, then the control moves to the next line in the code (i.e., line number 10) where the frame is destroyed. I want to be to able to automatically close the dialog box and go to the next line in the code i.e., self.Destroy()
if the user does not press the 'OK' button in the next 2 seconds. Any thoughts on how do I do that in wxpython ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您通过子类化 wx.Dialog 创建自己的自定义对话框,您可以使用 wx.Timer 生成一个周期性事件,您可以将一个处理程序绑定到该事件,该处理程序每隔计时器事件触发的时间,然后 x 事件触发后您可以销毁对话框。
工作示例:
If you create your own custom dialog by subclassing wx.Dialog you can use a wx.Timer to generate a periodic event to which you can bind a handler which updates the message every time the timer event fires, then after x event fires you can destroy the dialog.
Working example:
我认为您可能必须为此使用自定义
wx.Dialog
。您可以使用wx.FutureCall来调用将来触发的事件。像这样的东西:I think you might have to use a custom
wx.Dialog
for this. You can usewx.FutureCall
to call trigger an event in the future. Something like: