【问题标题】:Bring MessageBox to Foreground将 MessageBox 置于前台
【发布时间】:2016-01-24 14:27:59
【问题描述】:

我正在尝试使用 wx.MessageBox 来提示用户,但这样做时我遇到了一些问题:

response = wx.MessageBox(MESSAGE, document, wx.YES_NO | wx.STAY_ON_TOP) # prompt the user

出于某种原因,对话框拒绝停留在顶部,无论我为此传递的标志是什么。是否有在所有正在运行的前台应用程序顶部生成对话框的万无一失的方法?

【问题讨论】:

  • 这适用于我在 Windows 7 上使用 wxPython 3.0.2 和 Python 2.7。你在用什么?
  • Windows 8.1 和其他都一样。

标签: python wxpython


【解决方案1】:

我在某处读到wx.STAY_ON_TOPdialog 一起使用时仅适用于MSW。尽管如此,您可以通过将STAY_ON_TOP 分配给self 来解决问题

编辑:
与其不理会它并将其标记为无用,不如尝试以下方法。只有点击 Question 按钮保持在顶部,其余的行为正常(无论如何在 Linux 上)

import wx

class Example(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs) 
        self.InitUI()

    def InitUI(self):    
        panel = wx.Panel(self)
        hbox = wx.BoxSizer()
        sizer = wx.GridSizer(2, 2, 2, 2)
        btn1 = wx.Button(panel, label='Info')
        btn2 = wx.Button(panel, label='Error')
        btn3 = wx.Button(panel, label='Question')
        btn4 = wx.Button(panel, label='Alert')
        sizer.AddMany([btn1, btn2, btn3, btn4])
        hbox.Add(sizer, 0, wx.ALL, 15)
        panel.SetSizer(hbox)
        btn1.Bind(wx.EVT_BUTTON, self.ShowMessage1)
        btn2.Bind(wx.EVT_BUTTON, self.ShowMessage2)
        btn3.Bind(wx.EVT_BUTTON, self.ShowMessage3)
        btn4.Bind(wx.EVT_BUTTON, self.ShowMessage4)
        self.SetSize((300, 200))
        self.SetTitle('Messages')
        self.Centre()
        self.Show(True)
#        self.SetWindowStyle(wx.STAY_ON_TOP)
    def ShowMessage1(self, event):
        dial = wx.MessageDialog(None, 'Download completed', 'Info', wx.OK)
        dial.ShowModal()

    def ShowMessage2(self, event):
        dial = wx.MessageDialog(None, 'Error loading file', 'Error', 
            wx.OK | wx.ICON_ERROR | wx.STAY_ON_TOP)
        dial.ShowModal()

    def ShowMessage3(self, event):
        self.SetWindowStyle(wx.STAY_ON_TOP)
        dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question', 
            wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
        dial.ShowModal()
        self.SetWindowStyle(wx.DEFAULT_FRAME_STYLE)

    def ShowMessage4(self, event):
        dial = wx.MessageDialog(None, 'Unallowed operation', 'Exclamation', 
            wx.OK | wx.ICON_EXCLAMATION)
        dial.ShowModal()

def main():
    ex = wx.App()
    Example(None)
    ex.MainLoop()    

if __name__ == '__main__':
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多