[[oktatas:programozás:python:wxpython_gui|< wxPython GUI]] ====== wxPython Párbeszédablak ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2020, 2021 * [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Üzenetablak ===== A wx.MessageBox() csak egy függvény, amelyet egyszerű üzenetek megjelenítésére találtak ki. wx.MessageBox('Üzenetablak') {{:oktatas:programozas:python:wxpython_gui:messagebox_01.png?200|}} {{:oktatas:programozas:python:wxpython_gui:messagebox_01_2.png?200|}} GTK alapú rendszeren nem jelenik meg az ikon, mivel a GTK azt feltételezi, hogy a gombhoz tartozik bitmap kép, ezért nem jelenít meg ikont. wx.MessageBox('Üzenetablak', 'Info') {{:oktatas:programozas:python:wxpython_gui:messagebox_02.png?200|}} wx.MessageBox('Üzenetablak', 'Info', wx.OK) {{:oktatas:programozas:python:wxpython_gui:messagebox_03.png?200|}} wx.MessageBox('Üzenetablak', 'Info', wx.OK | wx.ICON_INFORMATION) Teljeskód: import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) self.btn = wx.Button(self, wx.ID_ANY, 'Mehet') self.btn.Bind(wx.EVT_BUTTON, self.onClickButton1) def onClickButton1(self, event): wx.MessageBox('Üzenetablak', 'Info', wx.OK | wx.ICON_INFORMATION) class SimpleApp(wx.App): def OnInit(self): frame = MainFrame(None, 'Párbeszéd') frame.Show() return True if __name__ == "__main__": app = SimpleApp() app.MainLoop() | wx.ICON_INFORMATION | Információs ikon | | wx.ICON_ERROR | Hiba ikon | | wx.ICON_QUESTION | Kérdés ikon | | wx.ICON_WARNING | Figyelmeztető ikon | | wx.ICON_AUTH_NEEDED | Azonosítás szükséges szimbólum | ===== Generic ===== Ez a megoldás működik GTK-án is. import wx.lib.agw.genericmessagedialog as GMD #... dlg = GMD.GenericMessageDialog(self, 'Üzenet', 'Teszt', agwStyle=wx.ICON_INFORMATION | wx.OK) dlg.ShowModal() {{:oktatas:programozas:python:wxpython_gui:generic_message_dialog.png?300|}} Teljes kód: import wx import wx.lib.agw.genericmessagedialog as GMD class MainFrame(wx.Frame): def __init__(self, parent): super(MainFrame, self).__init__(parent) self.button1 = wx.Button(self, label="Nyit") self.button1.Bind(wx.EVT_BUTTON, self.on_click_button1) self.button2 = wx.Button(self, label="Másik") main_box = wx.BoxSizer(wx.VERTICAL) main_box.Add(self.button2) main_box.Add(self.button1) self.SetSizer(main_box) def on_click_button1(self, event): dlg = GMD.GenericMessageDialog(self, 'Üzenet', 'Teszt', agwStyle=wx.ICON_INFORMATION | wx.OK) dlg.ShowModal() class ValamiApp(wx.App): def OnInit(self): frame = MainFrame(None) frame.Show() return True app=ValamiApp() app.MainLoop() ===== Modális ablak ===== A wx.MessageDialog segítségével létrehozható modális párbeszédablak. A wx.MessageDialog egy osztály, amit példányosítással használhatunk. dial = wx.MessageDialog(None, 'Üzenet', 'Info', wx.OK) dial.ShowModal() Teljeskód: import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) self.button1 = wx.Button(self, label='Mehet') self.button1.Bind(wx.EVT_BUTTON, self.onClickButton1) def onClickButton1(self, event): dial = wx.MessageDialog(None, 'Üzenet', 'Info', wx.OK) dial.ShowModal() app = wx.App() frame = MainFrame(None, 'Valami') frame.Show() app.MainLoop() ===== Saját ablak ===== Saját ablak létrehozásánál ügyeljünk arra, hogy az ablak szülője a főablak legyen. Ha nem állítjuk be, a szülőablak bezárása esetén a párbeszédablak még fut. Ha beállítjuk a főablakot szülőnek, annak bezárása esetén a párbeszédablakok is kilépnek. class ValamiDialog(wx.Dialog): def __init__(self, parent, title): super(ValamiDialog, self).__init__(parent, title=title, size=(300, 400)) panel = wx.Panel(self) self.btn = wx.Button(panel, wx.ID_OK, label='ok') import wx class ValamiDialog(wx.Dialog): def __init__(self, parent, title): super(ValamiDialog, self).__init__(parent, title=title, size=(300, 400)) panel = wx.Panel(self) self.btn = wx.Button(panel, wx.ID_OK, label='ok') class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) dialog = ValamiDialog(self, 'valami') dialog.Show() class SimpleApp(wx.App): def OnInit(self): frame = MainFrame(None, 'Párbeszéd') frame.Show() return True if __name__ == "__main__": app = SimpleApp() app.MainLoop() {{:oktatas:programozas:python:wxpython_gui:parbeszed01.png|}} ===== Saját újra ===== import wx class ValamiDialog(wx.Dialog): def __init__(self, parent, title): super(ValamiDialog, self).__init__(parent, title=title, size=(300, 400)) rootSizer = wx.BoxSizer(wx.VERTICAL) rootSizer.Add( wx.TextCtrl(self, -1, "Szöveg", wx.DefaultPosition, wx.Size(100, 50), wx.TE_MULTILINE), 1, wx.EXPAND | wx.ALL, 10) button_sizer = wx.BoxSizer(wx.HORIZONTAL) button_sizer.Add( wx.Button(self, wx.ID_OK, "OK"), 0, wx.ALL, 10) button_sizer.Add( wx.Button(self, wx.ID_CANCEL, "Mégsem"), 0, wx.ALL, 10) rootSizer.Add( button_sizer, 0, wx.ALIGN_CENTER) self.SetSizerAndFit(rootSizer) class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) dialog = ValamiDialog(self, 'Felirat') dialog.Show() class SimpleApp(wx.App): def OnInit(self): frame = MainFrame(None, 'Párbeszéd') frame.Show() return True if __name__ == "__main__": app = SimpleApp() app.MainLoop() {{:oktatas:programozas:python:wxpython_gui:parbeszed02.png|}} ===== Névjegy ===== import wx import wx.adv class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) description = """Ez egy tesztprojekt""" licence = """Szabadon használható""" self.info = wx.adv.AboutDialogInfo() self.info.SetIcon(wx.Icon('projekt01.png', wx.BITMAP_TYPE_PNG)) self.info.SetName('Saját program') self.info.SetVersion('1.0') self.info.SetDescription(description) self.info.SetCopyright('Copyright (C) Nagy János, 2020') self.info.SetWebSite('https://valahol.hu') self.info.SetLicence(licence) self.info.AddDeveloper('Nagy János') self.info.AddDocWriter('Nagy János') self.info.AddArtist('Nagy János') self.info.AddTranslator('Nagy János') self.btn = wx.Button(self, wx.ID_ANY, 'Mehet') self.btn.Bind(wx.EVT_BUTTON, self.onClickButton1) def onClickButton1(self, event): wx.adv.AboutBox(self.info) class SimpleApp(wx.App): def OnInit(self): frame = MainFrame(None, 'Párbeszéd') frame.Show() return True if __name__ == "__main__": app = SimpleApp() app.MainLoop() {{:oktatas:programozas:python:wxpython_gui:nevjegy.png|}} ===== Forrás ===== * http://zetcode.com/wxpython/dialogs/ (2020) * https://pythonspot.com/wxpython-dialogs/ (2020) * https://www.tutorialspoint.com/wxpython/wx_dialog_class.htm (2020) * https://wxpython.org/Phoenix/docs/html/wx.MessageDialog.html (2021) * https://wxpython.org/Phoenix/docs/html/wx.functions.html#wx.MessageBox (2021) * https://wxpython.org/Phoenix/docs/html/wx.lib.agw.genericmessagedialog.html (2021)