A.Lyapunov 发表于 2020-8-12 16:04:56

python如何让对话框窗口弹出在最前面

wx.MessageBox(message=name + "您好,欢迎您!", caption="温馨提示")用Python的wxpython时,请问如何让上面这个对话框窗口弹出在最前面


zltzlt 发表于 2020-8-12 16:09:23

建议用 MessageDialog

wxPython 提供了 MessageDialog 类,它封装了消息对话框的功能。它的构造器函数原型如下:

wx.MessageDialog(parent, message, caption=wx.MessageBoxCaptionStr, style=wx.OK | wx.CENTRE, pos=wx.DefaultPosition)

其中:

[*]parent 为对话框的父窗口
[*]message 为消息对话框显示的内容
[*]title 为对话框的标题
[*]style 为对话框的样式,常用的有 wx.OK(显示确定按钮)、wx.CANCEL(显示取消按钮)、wx.YES_NO(显示是否按钮)、wx.HELP(显示帮助按钮)、wx.ICON_ERROR(显示错误图标)、wx.ICON_WARNING(显示警告图标)、wx.ICON_QUESTION(显示问号图标)、wx.ICON_INFORMATION(显示信息图标)、wx.CENTER(将对话框居中)
[*]pos 为对话框显示的位置


MessageDialog 的 ShowModal() 方法用于显示对话框,它返回 wx.ID_OK、wx.ID_CANCEL、wx.ID_YES、wx.ID_NO、wx.ID_HELP,分别代表的含义是:用户按下确定按钮、取消按钮、是按钮、否按钮、帮助按钮。

例如:

import wx


class Frame(wx.Frame):
    def __init__(self):
      super().__init__(None, -1, "MessageDialog", size=(300, 300))
      panel = wx.Panel(self)
      btn = wx.Button(panel, -1, '点我!', (50, 50), (70, 30))
      btn.Bind(wx.EVT_BUTTON, self.OnClick)

    def OnClick(self, event):
      dialog = wx.MessageDialog(self, '系统已崩溃!', '严重错误', style=wx.OK | wx.CENTER | wx.ICON_ERROR)
      dialog.ShowModal()


if __name__ == '__main__':
    app = wx.App()
    frame = Frame()
    frame.Show()
    app.MainLoop()

执行结果:

https://xxx.ilovefishc.com/forum/202007/30/193302wkbp7df7zj9p1fbb.gif

A.Lyapunov 发表于 2020-8-12 16:18:54

zltzlt 发表于 2020-8-12 16:09
建议用 MessageDialog

好的,请问这两个对话框都差不多吗

zltzlt 发表于 2020-8-12 16:19:20

A.Lyapunov 发表于 2020-8-12 16:18
好的,请问这两个对话框都差不多吗

MessageDialog 可以指定对话框的父窗口

A.Lyapunov 发表于 2020-8-12 16:22:43

zltzlt 发表于 2020-8-12 16:19
MessageDialog 可以指定对话框的父窗口

父窗口是代表优先级最高,然后可以显示在最前面吗

zltzlt 发表于 2020-8-12 16:29:42

A.Lyapunov 发表于 2020-8-12 16:22
父窗口是代表优先级最高,然后可以显示在最前面吗

可能我理解错你的问题了,你试试这样

wx.MessageBox(message=name + "您好,欢迎您!", caption="温馨提示", style=wx.STAY_ON_TOP)

A.Lyapunov 发表于 2020-8-12 19:14:07

这个试过了,好像不能弹出在最前面

A.Lyapunov 发表于 2020-8-12 19:15:01

zltzlt 发表于 2020-8-12 16:29
可能我理解错你的问题了,你试试这样

这个我试过了,好像不能弹出在最前面

zltzlt 发表于 2020-8-12 19:19:59

这样呢?

wx.MessageDialog(self, name + "您好,欢迎您!", "温馨提示", style=wx.STAY_ON_TOP).ShowModal()

A.Lyapunov 发表于 2020-8-12 21:36:15

zltzlt 发表于 2020-8-12 19:19
这样呢?

我按照你第一次发的教程,就是改成这样了。已经可以弹出在最前面了。
wx.MessageBox可以正常弹出,只是不能出现在最前面。是因为wx.MessageBox没有wx.STAY_ON_TOP类似的语法吗
页: [1]
查看完整版本: python如何让对话框窗口弹出在最前面