Python 没有父窗口的wx.MessageDialog
是否可以使用wx.MessageDialog或其他没有父窗口的内容创建消息框 例如,我有时可能希望在GUI真正启动之前显示错误消息。然后,在创建父窗口之前,我需要能够显示一个消息框: 如果parent=None,则不起作用:Python 没有父窗口的wx.MessageDialog,python,user-interface,wxpython,wxwidgets,Python,User Interface,Wxpython,Wxwidgets,是否可以使用wx.MessageDialog或其他没有父窗口的内容创建消息框 例如,我有时可能希望在GUI真正启动之前显示错误消息。然后,在创建父窗口之前,我需要能够显示一个消息框: 如果parent=None,则不起作用: wx.MessageDialog(parent, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal() 如何在没有父窗口的情况下显示消息框?应该可以,请尝试以下操作: impo
wx.MessageDialog(parent, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal()
如何在没有父窗口的情况下显示消息框?应该可以,请尝试以下操作:
import wx
app = wx.App()
wx.MessageDialog(None, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal()
frame = wx.Frame(None)
frame.Center()
frame.Show()
app.MainLoop()
应该可以,试试这个:
import wx
app = wx.App()
wx.MessageDialog(None, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal()
frame = wx.Frame(None)
frame.Center()
frame.Show()
app.MainLoop()
我知道这是一个老生常谈的问题,但我相信parent=None并不像人们所期望的那样有效。考虑上面的例子,但是首先显示的是WX.Frand,然后是WX.MeasAgEdiLogic,类似于:
import wx
app = wx.App()
frame = wx.Frame(None)
frame.Center()
frame.Show()
wx.MessageDialog(None, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal()
app.MainLoop()
结果是一个wx.Frame,其顶部显示的wx.MessageDialog与预期的一样,但无法调整wx.Frame的大小或在屏幕周围拖动该wx.Frame。可以在屏幕上拖动wx.MessageDialog,但wx.MessageDialog不会随之移动。这两个框架显然不是独立工作的,而且wx.MessageDialog似乎属于wx.Frame。因此我认为wxPython应用了一些不明显的魔法;至少我在文档中看不到任何内容。我知道这是一个老问题,但我相信parent=None并不像人们所期望的那样有效。考虑上面的例子,但是首先显示的是WX.Frand,然后是WX.MeasAgEdiLogic,类似于:
import wx
app = wx.App()
frame = wx.Frame(None)
frame.Center()
frame.Show()
wx.MessageDialog(None, 'This is a message box.', 'Test', wx.OK | wx.ICON_INFORMATION).ShowModal()
app.MainLoop()
结果是一个wx.Frame,其顶部显示的wx.MessageDialog与预期的一样,但无法调整wx.Frame的大小或在屏幕周围拖动该wx.Frame。可以在屏幕上拖动wx.MessageDialog,但wx.MessageDialog不会随之移动。这两个框架显然不是独立工作的,而且wx.MessageDialog似乎属于wx.Frame。因此我认为wxPython应用了一些不明显的魔法;至少我在文档中看不到任何东西。只是看到了这个老问题,想回答它,迟做总比不做强:
默认情况下,主应用程序窗口用作对话框父窗口,即使没有明确指定父窗口,因为在99%的情况下,这是您想要的-没有父窗口/所有者窗口的模态对话框是非常不寻常的。如果您真的需要阻止对话框有父对象,则必须明确使用wx.dialog\u NO\u parent样式。刚刚看到这个老问题并想回答它,迟做总比不做强: 默认情况下,主应用程序窗口用作对话框父窗口,即使没有明确指定父窗口,因为在99%的情况下,这是您想要的-没有父窗口/所有者窗口的模态对话框是非常不寻常的。如果确实需要阻止对话框具有父级,则必须明确使用wx.dialog\u NO\u父级样式。不带父帧 似乎不需要使用框架来显示“独立”对话框。这个很好用。仅在Win10上测试 显然,wxpython将对话框(当然也只是一个窗口)作为显示的“框架”
import wx
# -------------------------------------------------------
def wx_ask_question_windowed(question, caption):
app = wx.App()
dlg = wx.MessageDialog(None, question, caption, wx.YES_NO | wx.ICON_INFORMATION)
dlg.Center()
dlg_result = dlg.ShowModal()
result = dlg_result == wx.ID_YES
dlg.Destroy()
app.MainLoop()
app.Destroy()
return result
# ==============================================================
def main():
if wx_ask_question_windowed('Do you like this?', 'A windowed question'):
print('You like it')
else:
print("You don't like it")
# ==============================================================
if __name__ == '__main__':
main()
没有父帧
似乎不需要使用框架来显示“独立”对话框。这个很好用。仅在Win10上测试
显然,wxpython将对话框(当然也只是一个窗口)作为显示的“框架”
import wx
# -------------------------------------------------------
def wx_ask_question_windowed(question, caption):
app = wx.App()
dlg = wx.MessageDialog(None, question, caption, wx.YES_NO | wx.ICON_INFORMATION)
dlg.Center()
dlg_result = dlg.ShowModal()
result = dlg_result == wx.ID_YES
dlg.Destroy()
app.MainLoop()
app.Destroy()
return result
# ==============================================================
def main():
if wx_ask_question_windowed('Do you like this?', 'A windowed question'):
print('You like it')
else:
print("You don't like it")
# ==============================================================
if __name__ == '__main__':
main()
这应该是可行的,但您需要确保主事件循环正在运行,而通常还没有。您还可以从wxSplashScreen获得一些提示,你是对的@CorleyBrigman:也许我以前做错了什么,现在它可以工作了……应该可以工作了,但你需要确保主事件循环正在运行,而通常还没有。您还可以从wxSplashScreen获得一些提示,你是对的@CorleyBrigman:也许我以前做错了什么,现在它可以工作了……这在从wxPython 2.8迁移时特别重要:这在从wxPython 2.8迁移时特别重要: