[[:oktatas:programozás:python:wxPython_gui|< wxPython]] ====== wxPython widgetek I ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2020, 2021 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== StaticText ===== ==== Háttér és előtér ==== Háttérszín beállítása: felirat1 = wx.StaticText(panel, title='valami') felirat1.SetForegroundColour('blue') felirat1.SetForegroundColour((0, 0, 255)) felirat1.SetForegroundColour('blue') felirat1.SetForegroundColour(wx.Colour(0,0,255)) ==== Felirat változtatása ==== Ha szeretnénk megváltoztatni a StaticText feliratát futás közben, akkor szükség van egyedi azonosítóra. Ezt a wx.ID_ANY paraméter megadásával tehetjük meg: felirat1 = wx.StaticText(panel, wx.ID_ANY, 'valami') felirat1.SetLabel('Új felirat') Amire ügyeljünk: A StaticText feliratának változtatása utána, a felhasználói felületen, elveszti wx.EXPAND beállítást. Ha középre volt igazítva, és új értéket kap a felirat, az új szöveg eltérő karakter szélesség esetén nem lesz középen. Ilyen esetben az eseménykezelőben futtassuk a kereten egy Layout() függvényt. self.Layout() ==== Fontbeállítás ==== Fontbeállítás: label1.SetFont(wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, "Sans")) label1.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "Linux Libertine Display O")) label1.SetFont(wx.Font(16, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, "")) ==== Példa ==== import wx app = wx.App() mainFrame = wx.Frame(None, title='Feliratteszt') label1 = wx.StaticText(mainFrame, label='Felirat') label1.SetBackgroundColour('blue') label1.SetForegroundColour('white') mainFrame.Show(True) app.MainLoop() ===== TextCtrl ===== textctrl1 = wx.TextCtrl(self) textctrl1 = wx.TextCtrl(self, -1, 'Szöveg', style=wx.TE_MULTILINE) textctrl1 = wx.TextCtrl(self, -1, 'Szöveg') Szöveg színezése: szoveg = "Macska\nKutya\nMalac" self.te.AppendText(szoveg) self.te.SetStyle(0, -1, wx.TextAttr(wx.BLACK, wx.RED)) A StaticText-hez hasonló kinézet: Távolítsuk el a szegélyt. A TextCtrl objektum megtartja az wx.EXPAND beállítást, nem méreteződik át, új tartalom esetén, és szegély nélkül nem különbözik a StaticText-től. A TextCtrl objektumon állítsunk be csak olvasható módot. Például: textctrl1 = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.BORDER_NONE | wx.TE_CENTRE) textctrl1.Enable(False) Csak szélesség állítása: wx.TextCtrl(self, -1, size=(100, -1)) ===== ComboBox ===== self.combobox = wx.ComboBox(self) self.combobox.Append(['egy', 'kettő']) Kiválasztás esemény: self.combobox.Bind(wx.EVT_COMBOBOX, self.onCombobox) ... def onCombobox(self, event): print('Esemény') A kiválasztott érték lekérdezése: selected = self.combobox.GetValue() ===== ToggleButton ===== self.toggleButton = wx.ToggleButton(self, label='Mehet') self.toggleButton.Bind(wx.EVT_TOGGLEBUTTON, self.onClickToggle) import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) self.toggleButton = wx.ToggleButton(self, label='Mehet') self.toggleButton.Bind(wx.EVT_TOGGLEBUTTON, self.onClickToggle) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.toggleButton) self.SetSizer(vbox) self.Layout() def onClickToggle(self, event): # eredmény True vagy False allapot = event.GetEventObject().GetValue() print(allapot) class SimpleApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title='váltógomb') self.frame.Show() return True app = SimpleApp() app.MainLoop() ===== BitmapButton ===== kep = wx.Bitmap("valami.png", wx.BITMAP_TYPE_ANY) self.bitmapButton = wx.BitmapButton(self, -1, kep) self.bitmapButton.Bind(wx.EVT_BUTTON, self.onClickToggle) import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) kep = wx.Bitmap("valami.png", wx.BITMAP_TYPE_ANY) self.bitmapButton = wx.BitmapButton(self, -1, kep) self.bitmapButton.Bind(wx.EVT_TOGGLEBUTTON, self.onClickToggle) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.bitmapButton) self.SetSizer(vbox) self.Layout() def onClickToggle(self, event): # eredmény True vagy False allapot = event.GetEventObject().GetValue() print(allapot) class SimpleApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title='váltógomb') self.frame.Show() return True app = SimpleApp() app.MainLoop() ===== CheckBox ===== self.cb1 = wx.CheckBox(self, label='Első') self.cb2 = wx.CheckBox(self, label='Második') self.cb3 = wx.CheckBox(self, label='Harmadik') self.Bind(wx.EVT_CHECKBOX, self.onChecked) Beállítás, lekérdezés: self.cb.SetValue(True) if self.cb.GetValue(): pass import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) self.cb1 = wx.CheckBox(self, label='Első') self.cb2 = wx.CheckBox(self, label='Második') self.cb3 = wx.CheckBox(self, label='Harmadik') self.Bind(wx.EVT_CHECKBOX, self.onChecked) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.cb1) vbox.Add(self.cb2) vbox.Add(self.cb3) self.SetSizer(vbox) self.Layout() def onChecked(self, event): cb = event.GetEventObject() print(cb.GetLabel(), cb.GetValue) class SimpleApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title='váltógomb') self.frame.Show() return True app = SimpleApp() app.MainLoop() ===== RadioButton és RadioBox ===== {{:oktatas:programozas:python:wxpython_gui:radiogombok.png?400|}} Egyéni rádiógombok: self.rb1 = wx.RadioButton(self, 11, label='Első', style = wx.RB_GROUP) self.rb2 = wx.RadioButton(self, 22, label='Második') self.rb3 = wx.RadioButton(self, 33, label='Harmadik') self.Bind(wx.EVT_RADIOBUTTON, self.onRadiogroup) Csoportgombok: feliratok = ['Egy', 'Kettő', 'Három'] self.rbox = wx.RadioBox(self, label='gombok', choices=feliratok) self.rbox.Bind(wx.EVT_RADIOBOX, self.onRadioBox) import wx class MainFrame(wx.Frame): def __init__(self, parent, title): super(MainFrame, self).__init__(parent, title=title) self.rb1 = wx.RadioButton(self, 11, label='Első', style = wx.RB_GROUP) self.rb2 = wx.RadioButton(self, 22, label='Második') self.rb3 = wx.RadioButton(self, 33, label='Harmadik') feliratok = ['Egy', 'Kettő', 'Három'] self.rbox = wx.RadioBox(self, label='gombok', choices=feliratok) self.Bind(wx.EVT_RADIOBUTTON, self.onRadiogroup) self.rbox.Bind(wx.EVT_RADIOBOX, self.onRadioBox) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(self.rb1) vbox.Add(self.rb2) vbox.Add(self.rb3) vbox.Add(self.rbox) self.SetSizer(vbox) self.Layout() def onRadiogroup(self, event): rb = event.GetEventObject() print(rb.GetLabel()) def onRadioBox(self, event): print(self.rbox.GetStringSelection()) class SimpleApp(wx.App): def OnInit(self): self.frame = MainFrame(None, title='váltógomb') self.frame.Show() return True app = SimpleApp() app.MainLoop() ===== Forrás ===== * https://wxpython.org/Phoenix/docs/html/wx.TextCtrl.html (2020) * https://wxpython.org/Phoenix/docs/html/wx.ComboBox.html (2021)