将MessageBox置于前台

2024-10-14 12:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

出于某种原因,无论我传递了什么标志,对话框都拒绝保持在最上面。在所有运行的前台应用程序的顶部生成一个对话框,有没有一种简单易行的方法?在


Tags: theno用户messageonresponsetopdocument
1条回答
网友
1楼 · 发布于 2024-10-14 12:33:54

我在某个地方读到,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()

相关问题 更多 >