wxPython Events mit wx.lib.newevent.NewEvent()
Verfasst: Freitag 23. März 2007, 23:19
Die einfachere Art, selbst Events zu definieren
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import wx.lib.newevent
wx.SetDefaultPyEncoding("iso-8859-1")
# Event-Klassen und Eventbinder-Funktionen erstellen
(LeftClickEvent, EVT_LEFT_CLICK) = wx.lib.newevent.NewEvent()
(RightClickEvent, EVT_RIGHT_CLICK) = wx.lib.newevent.NewEvent()
class MyTestpanel(wx.Panel):
def __init__(self, parent):
# Init
wx.Panel.__init__(self, parent)
# hbox
hbox = wx.BoxSizer(wx.HORIZONTAL)
self.SetSizer(hbox)
# Placeholder
hbox.Add((0, 0), 1)
# Left Button
btn_left = wx.Button(self, -1, "Left Click")
hbox.Add(btn_left, 0, wx.ALL | wx.ALIGN_CENTER, 10)
btn_left.Bind(wx.EVT_BUTTON, self.on_left_click)
# Right Button
btn_right = wx.Button(self, -1, "Right Click")
hbox.Add(btn_right, 0, wx.ALL | wx.ALIGN_CENTER, 10)
btn_right.Bind(wx.EVT_BUTTON, self.on_right_click)
# Placeholder
hbox.Add((0, 0), 1)
def on_left_click(self, event = None):
"""
Eventhandler für den Klick auf den linken Button
"""
# Event-Instanz erstellen
evt = LeftClickEvent()
# Event auslösen
self.ProcessEvent(evt)
def on_right_click(self, event = None):
"""
Eventhandler für den Klick auf den rechten Button
"""
# Event-Instanz erstellen
evt = RightClickEvent()
# Event auslösen
self.ProcessEvent(evt)
class MyFrame(wx.Frame):
def __init__(
self, parent = None, id = -1, title = "Example", size = wx.Size(250, 200)
):
wx.Frame.__init__(self, parent, id, title, size = size)
# Panel
panel = wx.Panel(self)
# Vbox
vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
# Testpanel
testpanel = MyTestpanel(panel)
vbox.Add(testpanel, 0, wx.EXPAND)
# Textctrl
txt_log = wx.TextCtrl(
panel, style = wx.TE_LINEWRAP | wx.TE_MULTILINE | wx.TE_READONLY
)
vbox.Add(txt_log, 1, wx.EXPAND)
self.txt_log = txt_log
# Events binden
testpanel.Bind(EVT_LEFT_CLICK, self.on_left_click)
testpanel.Bind(EVT_RIGHT_CLICK, self.on_right_click)
def on_left_click(self, event = None):
"""
Eventhandler für den Klick auf den Linken Button des Testpanels.
"""
if not self.txt_log.GetValue() == "":
self.txt_log.AppendText("\n")
self.txt_log.AppendText("EVT_LEFT_CLICK")
def on_right_click(self, event = None):
"""
Eventhandler für den Klick auf den Rechten Button des Testpanels.
"""
if not self.txt_log.GetValue() == "":
self.txt_log.AppendText("\n")
self.txt_log.AppendText("EVT_RIGHT_CLICK")
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()