Wie mouse für einen Qt-Designer Widget in PyQt implementieren
-
30-09-2019 - |
Frage
Ich habe ein Widget (QTabeleWidget, QLabels und einige QButtons) bekam. Es wurde in Qt-Designer, gebaut und jetzt muss ich einige Dinge umzusetzen. Dafür brauche ich die mouse. Normalerweise würde ich schreibe eine Unterklasse und schreiben etwas wie folgt aus:
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
print "left"
else:
print 'right'
Aber ich weiß nicht, wie das in Designer erstellt für ein Widget zu tun. Ich brauche es für die QTabeleWidget. Hoffe jemand kann mir helfen. Ich habe versucht, das Problem mit Hilfe von Google zu lösen, aber ohne Erfolg. Diese Seite hat mir geholfen, viele Male, so dass ich dachte, ich werde ihm einen Schuss geben und fragen.
Lösung
Mit PyQt gibt es drei verschiedene Möglichkeiten, um die Arbeit mit Formularen in Designer erstellt:
- Verwenden Sie die einfache Vererbung und machen die Form eine Membervariable
- Verwenden Sie Mehrfachvererbung
- Dynamisch die Mitglieder direkt von der UI-Datei generiert
Single Vererbung :
class MyTableWidget(QTableWidget):
def __init__(self, parent, *args):
super(MyTableWidget, self).__init__(parent, args)
self.ui = YourFormName()
self.ui.setupUi(self)
# all gui elements are now accessed through self.ui
def mousePressEvent(self, event):
pass # do something useful
Mehrfachvererbung :
class MyTableWidget(QTableWidget, YourFormName):
def __init__(self, parent, *args):
super(MyTableWidget, self).__init__(parent, args)
self.setupUi(self)
# self now has all members you defined in the form
def mousePressEvent(self, event):
pass # do something useful
Dynamisch generierte :
from PyQt4 import uic
yourFormTypeInstance = uic.loadUi('/path/to/your/file.ui')
(3) oben, werden Sie mit einer Instanz am Ende von was auch immer Basistyp Sie für Ihr Formular angegeben. Anschließend können Sie Ihre mousePressEvent
außer Kraft setzen, wie gewünscht.
Ich würde empfehlen, einen Blick auf Abschnitt 13.1 im PyQt4 Referenzhandbuch . Abschnitt 13.2 spricht über die uic
Modul.