平台:Windows、OS X
Python 版本:事件状态 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' ,则向用户显示一个消息框并提示用户按 'OK'。如果用户按下消息框上的“确定”按钮,则控件将移动到代码中的下一行(即第 10 行),在此帧被销毁。如果用户在接下来的 2 秒内没有按下“确定”按钮,我希望能够自动关闭对话框并转到代码中的下一行,即
self.Destroy()
。关于如何在 wxpython 中做到这一点的任何想法? 最佳答案
我认为您可能必须为此使用自定义 wx.Dialog
。以后可以使用 wx.FutureCall
调用触发事件。就像是:
class MessageDialog(wx.Dialog):
def __init__(self, message, title):
wx.Dialog.__init__(self, None, -1, title,size=(300, 120))
self.CenterOnScreen(wx.BOTH)
ok = wx.Button(self, wx.ID_OK, "OK")
ok.SetDefault()
text = wx.StaticText(self, -1, message)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(text, 1, wx.ALIGN_CENTER|wx.TOP, 10)
vbox.Add(ok, 1, wx.ALIGN_CENTER|wx.BOTTOM, 10)
self.SetSizer(vbox)
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':
dlg = MessageDialog('The host name should be superman. Closing this dialog box in 2s...', 'Info')
wx.FutureCall(2000, dlg.Destroy)
dlg.ShowModal()
else:
self.Center()
self.Show()
关于python - wxMessageBox 在 wxPython 中带有自动关闭计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6012380/