(2018/08/25) Nous avons reçu un commentaire indiquant que cet événement a été corrigé dans Qt pour Python 5.11.2. Par conséquent, les contenus suivants sont obsolètes.
Notes personnelles. J'écrirai peut-être un peu plus de détails plus tard.
PySide (ou peut-être Qt) a le concept de "signal" et de "slot" comme mécanisme de gestion des événements GUI.
Dans ce qui suit, la méthode button_clicked définie par moi-même est liée comme un slot au signal "clicked".
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')
«cliqué» est littéralement associé à un événement de clic. Lorsque l'on clique sur l'objet correspondant (bouton dans l'exemple ci-dessus), l'emplacement associé (button_clicked) est appelé.
Alors, voici un cas où je suis un peu coincé aujourd'hui. Vous pouvez spécifier l'objet source d'événement en appelant self.sender () dans la méthode spécifiée comme emplacement. À ce moment-là, si la méthode spécifiée comme emplacement est la modification des noms, self.sender () renvoie None et l'objet source n'a pas pu être obtenu avec succès.
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)
#Ne nommez pas la mutilation
def button_clicked(self):
sender = self.sender()
print sender.text()
#Nom mutilation
def __button_clicked(self):
sender = self.sender()
print sender.text()
Ce qui suit est la sortie à ce moment-là.
Button1 (Button1 peut obtenir l'origine)
Traceback (most recent call last): (Button2 ne peut pas fonctionner)
File "sandbox/myevent.py", line 77, in __button_clicked
print sender.text()
AttributeError: 'NoneType' object has no attribute 'text'
La cause n'a pas encore été rattrapée, mais si vous la spécifiez comme créneau pour le moment, ne nommez pas la mutilation ...
Recommended Posts