#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Pouziti signalu ve VxWindows pomoci tridy Dispatcher ''' import wx import wx.py.dispatcher as Dispatcher class MyButton(wx.Button): def __init__(self,*args,**kwargs): wx.Button.__init__(self,*args,**kwargs) self.Bind(wx.EVT_BUTTON, self.OnButtonClick) self.clickedCounter = 0 def OnButtonClick(self, event): self.clickedCounter += 1 Dispatcher.send('clicked',sender=self,eventCount=self.clickedCounter) class EventFrame(wx.Frame): def __init__(self, parent, id): wx.Frame.__init__(self, parent, id, u'Okno s tlačítkem', size=(400, 200)) self.panel = wx.Panel(self) self.button = MyButton(self.panel, label="Klikni si!", pos=(100, 15), size=(100,25), name='tlacitko') self.text = None Dispatcher.connect(self.onButtonClick,'clicked', self.button) Dispatcher.connect(self.printLabel,'clicked', self.button) def onButtonClick(self,signal,sender,eventCount): if eventCount % 2 == 0: sender.SetLabel(u'Sudá je bílá') self.panel.SetBackgroundColour('White') else: sender.SetLabel(u'Lichá je zelená') self.panel.SetBackgroundColour('Green') def printLabel(self,signal,sender,eventCount): ''' Tato funkce je jaksi navic - pouze na ukazku, ze jde priradit signal k vice metodam. ''' if self.text : self.text.Destroy() self.text = wx.StaticText(self.panel, -1, u'Jméno widgetu: "%s"\nZachycený signál: "%s"\nCelkový počet kliknutí: %d' % (self.button.GetName(), signal, eventCount), pos=(70, 60)) self.text.SetBackgroundColour('Yellow') self.panel.Refresh() if __name__ == '__main__': app = wx.PySimpleApp() frame = EventFrame(parent=None, id=-1) frame.Show() app.MainLoop()