Précautions lors de la définition des emplacements pour PySide

Mise en garde

(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

Remarques sur la définition des slots PySide (2)
Précautions lors de la définition des emplacements pour PySide
Notes sur Flask
Remarques sur les réseaux de neurones
Notes de céleri sur Django
Remarques sur l'installation de PycURL
Remarques sur l'utilisation d'Alembic
Remarques sur les fonctions de la famille SciPy.linalg
Remarques sur tf.function et traçage
Remarques sur l'installation de dlib sur Mac
Notes sur le module sqlite3 de python
Remarques sur les * args et ** kargs
[Django] Remarques sur l'utilisation de django-debug-toolbar
Notes sur pyenv et Atom
[Python] Notes sur l'analyse des données
Remarques sur l'optimisation à l'aide de Pytorch
Remarques sur l'installation de Python sur votre Mac
Remarques sur l'installation de pipenv sur votre Mac
Remarques sur l'installation d'Anaconda 3 sur Windows
Remarques sur imshow () d'OpenCV
Remarques sur l'installation de Python sur CentOS
Notes sur Python et les types de dictionnaire
Remarques sur la gestion des packages avec conda
Remarques sur l'utilisation de MeCab depuis Python
Remarques sur l'utilisation de pywinauto
Remarques sur l'utilisation de la post-réception et de la post-fusion
Remarques sur l'utilisation des featuretools
Remarques sur l'installation de Python à l'aide de PyEnv
Notes sur l'utilisation de rstrip avec python.
Remarques sur l'accès à dashDB à partir de python
Remarques sur l'utilisation de matplotlib sur le serveur
Remarques sur la rédaction de requirements.txt
Remarques sur l'installation d'Ubuntu 18.04 sur XPS 15 7590
(Débutant) Remarques sur l'utilisation de pyenv sur Mac