(2018/08/25) Wir haben einen Kommentar erhalten, dass dieses Ereignis in Qt für Python 5.11.2 behoben wurde. Daher sind die folgenden Inhalte veraltet.
Persönliche Notizen. Vielleicht schreibe ich später etwas ausführlicher.
PySide (oder vielleicht Qt) hat die Konzepte von "Signalen" und "Slots" als Mechanismus für die Behandlung von GUI-Ereignissen.
Im Folgenden wird die von mir definierte button_clicked-Methode als Slot mit dem Signal 'clicked' verknüpft.
ex1
class Hoge(QWidget):
def __init__(self):
super(Hoge, self).__init__()
self.button1 = QPushButton('Button1', self)
self.button1.clicked.connect(self.button_clicked)
def button_clicked(self):
sender = self.sender()
self.window().statusBar().showMessage(sender.text() + ' was clicked')
'geklickt' ist buchstäblich mit einem Klickereignis verbunden. Wenn Sie auf das entsprechende Objekt (Schaltfläche im obigen Beispiel) klicken, wird der zugehörige Steckplatz (button_clicked) aufgerufen.
Also, hier ist ein Fall, in dem ich heute ein wenig festgefahren bin. Sie können das Ereignisquellenobjekt angeben, indem Sie self.sender () in der als Slot angegebenen Methode aufrufen. Zu diesem Zeitpunkt gibt self.sender () None zurück, wenn die als Steckplatz angegebene Methode name mangling ist, und das Quellobjekt konnte nicht erfolgreich erfasst werden.
ex2
class Hoge(QWidget):
def __init__(self):
super(Hoge, self).__init__()
self.button1 = QPushButton('Button1', self)
self.button1.clicked.connect(self.button_clicked)
self.button2 = QPushButton('Button1', self)
self.button2.clicked.connect(self.__button_clicked)
#Nennen Sie Mangling nicht
def button_clicked(self):
sender = self.sender()
print sender.text()
#Name Mangling
def __button_clicked(self):
sender = self.sender()
print sender.text()
Das Folgende ist die Ausgabe zu diesem Zeitpunkt.
Button1 (Button1 kann den Ursprung bekommen)
Traceback (most recent call last): (Button2 kann nicht funktionieren)
File "sandbox/myevent.py", line 77, in __button_clicked
print sender.text()
AttributeError: 'NoneType' object has no attribute 'text'
Die Ursache ist noch nicht geklärt, aber wenn Sie sie vorerst als Slot angeben, nennen Sie Mangling nicht ...
Recommended Posts