【问题标题】:python wx to show popup after main screen has been initializedpython wx在主屏幕初始化后显示弹出窗口
【发布时间】:2016-07-05 12:27:07
【问题描述】:

我想在我的主屏幕上方显示一个弹出窗口,如下所示:

|´´´´´´´´´´´´´´´´´´´´´´|
|   I WANT TO BE SHOWN.|
|    |´´´´´´´´´´´´´|   |
|    |  I AM A     |   |
|    |  POPUP      |   |
|    |_____________|   |
|______________________|

问题是当我有以下代码时:

class A(a_frame_class):

   def __init__(self, parent):
       a_frame_class.__init__(self, parent)
       dialog = a_frame_class.dialog()
       if dialog.ShowModal() == wx.ID_OK:
            #do stuff

if __name__ == "__main__":
app = wx.App(False)
frame = A(None)
frame.Show(True) #<-- Why is this not "proccing" ?
app.MainLoop() 

它只显示弹出窗口,因此在对话框停止阻塞之前不会显示“父”窗口。我该如何解决这个问题? 我试过threadingwx.CallLaterwx.CallAfter,并将其放入方法dialogmethod 并调用它。它们都工作相同,即它仍然阻塞。我猜我在这里遗漏了一些基本的东西,因为这通常适用于其他程序中的其他对话框(尽管结构略有不同)

问候

【问题讨论】:

    标签: python dialog wxwidgets


    【解决方案1】:

    这是因为“父”窗口在调用 Show 方法后显示。初始化框架时,会调用 init 并创建对话框。 frame.Show(true)init 完成执行时被调用,所以当对话框被关闭时。你的代码应该是这样的

    class A(a_frame_class):
    
        def __init__(self, parent):
            a_frame_class.__init__(self, parent)
            self.Show()
            dialog = a_frame_class.dialog()
            if dialog.ShowModal() == wx.ID_OK:
                #do stuff
    
    if __name__ == "__main__":
        app = wx.App(False)
        frame = A(None)
        app.MainLoop() 
    

    如果我们添加对调用超类方法的正确使用,您的代码应该是这样的

    class A(a_frame_class):
    
        def __init__(self, parent):
            super(A, self).__init__(parent)
            self.Show()
            dialog = super(A, self).dialog()
            if dialog.ShowModal() == wx.ID_OK:
                #do stuff
    
    if __name__ == "__main__":
        app = wx.App(False)
        frame = A(None)
        app.MainLoop() 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多