Seite 1 von 1

wxPython Events mit wx.lib.newevent.NewEvent()

Verfasst: Freitag 23. März 2007, 23:19
von gerold
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()