Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 没有父窗口的wx.MessageDialog_Python_User Interface_Wxpython_Wxwidgets - Fatal编程技术网

Python 没有父窗口的wx.MessageDialog

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或其他没有父窗口的内容创建消息框

例如,我有时可能希望在GUI真正启动之前显示错误消息。然后,在创建父窗口之前,我需要能够显示一个消息框:

如果parent=None,则不起作用:

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迁移时特别重要: