平台: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/

10-12 21:25