[[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)