[PYTHON] Vorsichtsmaßnahmen beim Definieren von Slots für PySide

Hinweis

(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

Hinweise zum Definieren von PySide-Steckplätzen (2)
Vorsichtsmaßnahmen beim Definieren von Slots für PySide
Hinweise zur Flasche
Hinweise zu neuronalen Netzen
Sellerie-Notizen zu Django
Hinweise zur Installation von PycURL
Hinweise zur Verwendung von Alembic
Hinweise zu Funktionen der SciPy.linalg-Familie
Hinweise zur Funktion und Rückverfolgung
Hinweise zur Installation von dlib auf einem Mac
Hinweise zum SQLite3-Modul von Python
Anmerkungen zu * args und ** kargs
[Django] Hinweise zur Verwendung der Django-Debug-Symbolleiste
Anmerkungen zu Pyenv und Atom
[Python] Hinweise zur Datenanalyse
Hinweise zur Optimierung mit Pytorch
Hinweise zur Installation von Python auf Ihrem Mac
Hinweise zur Installation von pipenv auf Ihrem Mac
Hinweise zur Installation von Anaconda 3 unter Windows
Hinweise zu imshow () von OpenCV
Hinweise zur Installation von Python unter CentOS
Hinweise zu Python- und Wörterbuchtypen
Hinweise zur Paketverwaltung mit conda
Hinweise zur Verwendung von MeCab aus Python
Hinweise zur Verwendung von Pywinauto
Hinweise zur Verwendung von Post-Receive und Post-Merge
Hinweise zur Verwendung von featuretools
Hinweise zur Installation von Python mit PyEnv
Hinweise zur Verwendung von rstrip mit Python.
Hinweise zum Zugriff auf dashDB über Python
Hinweise zur Verwendung von matplotlib auf dem Server
Hinweise zum Schreiben von require.txt
Hinweise zur Installation von Ubuntu 18.04 auf XPS 15 7590
(Anfänger) Hinweise zur Verwendung von pyenv auf dem Mac