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