Tartalomjegyzék
wxPython Eseménykezelés
- Szerző: Sallai András
- Copyright © Sallai András, 2020, 2021
- Web: https://szit.hu
Esemény forrásának lekérdezése
Ha az egész ablakon figyeljük a wx.EVT_BUTTON esemény bekövetkezését, egyszerre kezelhetjük az összes nyomógombot. Az eseménykezelőben a az event objektumból tudjuk kiolvasni, melyik gombot nyomták le.
def InitUi(self): self.btn1 = wx.Button(self, 1001, label='Egy') self.btn2 = wx.Button(self, 1002, label='Kettő') self.btn3 = wx.Button(self, 1003, label='Három') def InitEvent(self): self.Bind(wx.EVT_BUTTON, eventHandler) def eventHandler(self, event): if event.GetId() == 1001: print('egy') elif event.GetId() == 1002: print('kettő') elif event.GetId() == 1003: print('három')
Lekérés widget objektumba, és név kinyerése:
widget = event.GetEventObject() print(widget.GetName())
Gomb és egérmozgás
A nyomógombhoz más események is rendelhetők. Például figyelhetjük a gomb felett mozog az egér.
button.Bind(wx.EVT_MOTION, self.on_motion_button)
Teljes kód:
- mozog.py
import wx class MainFrame(wx.Frame): def __init__(self, parent): super(MainFrame, self).__init__(parent) button = wx.Button(self, label="Mehet") button.Bind(wx.EVT_MOTION, self.on_motion_button) self.i=0 def on_motion_button(self, event): self.i+=1 print(self.i) class ValamiApp(wx.App): def OnInit(self): frame = MainFrame(None) frame.Show() return True app=ValamiApp() app.MainLoop()
Figyelhetjük akár a gomb átméretezését is:
button.Bind(wx.EVT_SIZE, self.on_motion_button)
Ablak események
Elkaphatjuk az ablak klasszikus eseményeit:
self.Bind(wx.EVT_CLOSE, self.on_close_window)
Teljes kód:
- bezar.py
import wx class MainFrame(wx.Frame): def __init__(self, parent): super(MainFrame, self).__init__(parent) self.button1 = wx.Button(self, label="Egyik") 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) self.Bind(wx.EVT_CLOSE, self.on_close_window) def on_close_window(self, event): md = wx.MessageDialog(self, 'Biztos?', 'Kérdés', wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION) if md.ShowModal() == wx.ID_YES: self.Destroy() else: event.Veto() class ValamiApp(wx.App): def OnInit(self): frame = MainFrame(None) frame.Show() return True app=ValamiApp() app.MainLoop()
Ablak billentyűk
Az ablakon kiváltott billentyűnyomások a EVT_CHAR_HOOK eseménnyel kezelhetők. A EVT_KEY_DOWN és EVT_KEY_UP csak wx.Button komponensnél használható.
Ilyen esetben a tabulátor sem fog működni, ezért nem engedjük tovább az eseményt a event.Skip() utasítással.
- ablak.py
import wx class MainFrame(wx.Frame): def __init__(self, parent): super(MainFrame, self).__init__(parent) self.button1 = wx.Button(self, label="Egyik") 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) self.Bind(wx.EVT_CHAR_HOOK, self.on_char_hook) def on_char_hook(self, event): code = event.GetKeyCode() print(code) event.Skip() class ValamiApp(wx.App): def OnInit(self): frame = MainFrame(None) frame.Show() return True app=ValamiApp() app.MainLoop()
Megvizsgálhatjuk a leütött billentyűket:
def on_char_hook(self, event): code = event.GetKeyCode() if code == wx.WXK_LEFT: print('balra') if code == wx.WXK_RIGHT: print('jobbra') if code == wx.WXK_UP: print('fel') if code == wx.WXK_DOWN: print('le') event.Skip()
wx.WXK_SPACE | szóköz |
wx.WXK_DELETE | törlés |
wx.WXK_LEFT | balra |