Heim > Backend-Entwicklung > Python-Tutorial > Analyse zur Implementierung und Verwendung benutzerdefinierter Ereignisse in wxpython

Analyse zur Implementierung und Verwendung benutzerdefinierter Ereignisse in wxpython

不言
Freigeben: 2018-05-16 16:27:06
Original
2406 Leute haben es durchsucht

Die Beispiele in diesem Artikel beschreiben die Implementierung und Verwendung benutzerdefinierter Ereignisse in wxpython. Geben Sie es wie folgt als Referenz für alle frei:

Schritte zum Erstellen eines benutzerdefinierten Ereignisses:

① Definieren Sie die Ereignisklasse, die von wx.PyCommandEvent erben muss. Und definieren Sie Get- und Set-Methoden, um Ereignisparameter abzurufen und festzulegen.

② Erstellen Sie einen Ereignistyp und ein Bindungsobjekt, um das Ereignis an ein bestimmtes Objekt zu binden.

③ Erstellen Sie ein benutzerdefiniertes Ereignisobjekt, legen Sie Ereignisparameter fest und verwenden Sie die ProcessEvent()-Methode, um diese Instanz in das Ereignisverarbeitungssystem einzuführen.

④ Binden Sie den Ereignishandler des benutzerdefinierten Ereignisses.

⑤ Reagieren Sie auf Ereignisse im Ereignishandler.

Beispielcode:

#!/usr/bin/env python
#coding=utf-8
import wx
class MyTestEvent(wx.PyCommandEvent):  #1 定义事件
  def __init__(self, evtType, id):
    wx.PyCommandEvent.__init__(self, evtType, id)
    self.eventArgs = ""
  def GetEventArgs(self):
    return self.eventArgs
  def SetEventArgs(self, args):
    self.eventArgs = args
myEVT_MY_TEST = wx.NewEventType() #2 创建一个事件类型
EVT_MY_TEST = wx.PyEventBinder(myEVT_MY_TEST, 1) #3 创建一个绑定器对象
class MyFrame(wx.Frame):
  def __init__(self):
    wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300),pos=(300,300))
    panel = wx.Panel(self, -1)
    self.button1 = wx.Button(panel,id=-1,pos=(40, 40),label="button1")
    self.Bind(wx.EVT_BUTTON, self.OnButton1Click, self.button1)
    self.Bind(EVT_MY_TEST, self.OnHandle)# 4绑定事件处理函数
  def OnButton1Click(self,event):
    self.OnDoTest()
  def OnHandle(self,event):#8 事件处理函数
    dlg = wx.MessageDialog(self, event.GetEventArgs(),'A Message Box',wx.OK | wx.ICON_INFORMATION)
    dlg.ShowModal()
    dlg.Destroy()
  def OnDoTest(self):
    evt = MyTestEvent(myEVT_MY_TEST, self.button1.GetId()) #5 创建自定义事件对象
    evt.SetEventArgs("test event")  # 6添加数据到事件
    self.GetEventHandler().ProcessEvent(evt) #7 处理事件
if __name__ == '__main__':
  app = wx.PySimpleApp()
  frame = MyFrame()
  frame.Show(True)
  app.MainLoop()
Nach dem Login kopieren

Anleitung:

1. Definieren Sie die MyTestEvent-Klasse als Unterklasse von wx.PyCommandEvent. wx.PyCommandEvent ist eine wxPython-spezifische Struktur, die zum Erstellen neuer Ereignisklassen und zum Verbinden von C-Klassen mit Ihrem Python-Code verwendet werden kann.

2. wx.NewEventType() ähnelt wx.NewId(); es gibt eine eindeutige Ereignistyp-ID zurück.

3. Der Wert des zweiten Parameters liegt zwischen [0,2]. Er stellt die wxId-Identifikationsnummer dar, die in der Methode wx.EvtHandler.Bind() verwendet wird welches Objekt die Quelle des Ereignisses ist.

4. Bind-Ereignishandler.

5. Erstellen Sie ein benutzerdefiniertes Ereignisobjekt und übergeben Sie die ID des Steuerelements, das das Ereignis ausgelöst hat, als Parameter an den Konstruktor von MyTestEvent.

6. Fügen Sie Daten zum Ereignis hinzu. Mit dieser Methode können Sie einige der benötigten Informationen weitergeben.

7. Der Aufruf von ProcessEvent() führt dieses neue Ereignis in das Ereignisverarbeitungssystem ein. Der Aufruf von GetEventHandler() gibt eine Instanz von wx.EvtHandler zurück, nämlich das Fensterobjekt selbst.

8. Binden Sie die Ereignisverarbeitungsfunktion hier, um die eingehenden Ereignisparameter über MessageDialog anzuzeigen.

Ich hoffe, dass dieser Artikel für alle in der Python-Programmierung hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage