2015-07-14 3 views
0

Я создаю приложение wxPython, в котором перечислены строки кнопок. При нажатии кнопок отображается всплывающее сообщение (которое будет цитатой). У меня возникли проблемы с программированием кнопок для отображения всплывающего сообщения.wxPython Buttons and Pop up Message

1) У меня возникли проблемы со всплывающим сообщением, отображаемым после нажатия кнопки wx.ToggleButton.

2) Другая проблема заключается в том, как я могу сделать несколько кнопок, которые будут каждое отображение различных сообщений

import wx 

class MyDialog(wx.Dialog): 

    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title, size=(350,300)) 
class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(550,500)) 

    self.CreateStatusBar() #Creates the Statusbar in bottom 
     filemenu = wx.Menu() 
     #About and Exit 
     menuAbout = filemenu.Append(wx.ID_ABOUT, "&About", 
" Information about this programme") 
     menuExit = filemenu.Append(wx.ID_EXIT, "E&xit", 
" Terminate the programme") 

     menuBar = wx.MenuBar() 
     menuBar.Append(filemenu, "&File") 
     self.SetMenuBar(menuBar) 

     panel = wx.Panel(self, -1) 
     wx.ToggleButton(panel, 1, 'Quote1', (100,100)) 

     self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) 
     self.Bind(wx.EVT_MENU, self.OnExit, menuExit) 






    def Quote1(self, e): 

     description = """Message Here""" 



    def OnAbout(self, e): 
     dlg = wx.MessageDialog(self, "About here ") 

     dlg.ShowModal() 
     dlg.Destroy() 

    def OnExit(self, e): 
     self.Close(True) 


class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'customdialog1.py') 
     frame.Show(True) 
     frame.Centre() 
     return True 

app = MyApp(0) 
app.MainLoop() 

ответ

0

Это довольно легко создать серию кнопок и привязать их к тому же обработчик. Я написал на эту тему несколько лет назад here. Используя этот пример, я создал что-то простое, используя свой пример:

import wx 

class TransientMessage(wx.PopupTransientWindow): 

    def __init__(self, parent, style, message): 
     wx.PopupTransientWindow.__init__(self, parent, style) 

     text = wx.StaticText(self, label=message) 
     sz = text.GetBestSize() 
     self.SetSize((sz.width+20, sz.height+20)) 


class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(550,500)) 

     self.CreateStatusBar() #Creates the Statusbar in bottom 
     filemenu = wx.Menu() 
     #About and Exit 
     menuAbout = filemenu.Append(wx.ID_ABOUT, "&About", 
            " Information about this programme") 
     menuExit = filemenu.Append(wx.ID_EXIT, "E&xit", 
            " Terminate the programme") 

     self.quotes = {'btn1': 'quote 1', 
         'btn2': 'another quote', 
         'btn3': 'Fore Score and 7 Years Ago'} 

     menuBar = wx.MenuBar() 
     menuBar.Append(filemenu, "&File") 
     self.SetMenuBar(menuBar) 

     panel = wx.Panel(self, -1) 
     topSizer = wx.BoxSizer(wx.HORIZONTAL) 
     for btn in self.quotes: 
      new_btn = wx.Button(panel, label=btn, name=btn) 
      topSizer.Add(new_btn, 0, wx.ALL, 5) 
      new_btn.Bind(wx.EVT_BUTTON, self.Quote1) 

     panel.SetSizer(topSizer) 

     self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) 
     self.Bind(wx.EVT_MENU, self.OnExit, menuExit) 


    def Quote1(self, e): 
     btn = e.GetEventObject() 
     quote = self.quotes[btn.GetName()] 
     win = TransientMessage(self, 
           wx.SIMPLE_BORDER, 
           quote) 

     pos = btn.ClientToScreen((0,0)) 
     sz = btn.GetSize() 
     win.Position(pos, (0, sz[1])) 

     win.Popup() 


    def OnAbout(self, e): 
     dlg = wx.MessageDialog(self, "About here ") 

     dlg.ShowModal() 
     dlg.Destroy() 

    def OnExit(self, e): 
     self.Close(True) 


class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'customdialog1.py') 
     frame.Show(True) 
     frame.Centre() 
     return True 

app = MyApp(0) 
app.MainLoop() 

Вы, вероятно, захотите изменить его немного, так что значение котировки словаря другая структура данных, которая содержит метку кнопки и цитаты вместо того, чтобы использовать ту же строку для метки кнопки и ее имени.