Как добавить в PQT5 событие на ярлык

Моя проблема заключается в том, что я хочу добавить к метке или тексту событие в моем случае mousePressEvent. Но он не работает по этому тексту - это мой код, который не работает.

self.label2.mousePressEvent = self.credits

    def credits(self, event):
        print("credits")

Здесь я получаю ошибку AttributeError: у объекта 'Window' нет атрибута 'label2'

Я также попробую это:

label2.mousePressEvent.connect(self.credits)

def credits(self):
            print("credits")

Это тоже работает:(Любые идеи, я рад, если кто-нибудь может мне помочь:(Если вам нужен полный код здесь:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.initMe()

    def initMe(self):

        label1 = QtWidgets.QLabel(self)
        label1.setText("Überschrift mit namen des text adventure")
        label1.setStyleSheet("font-size: 18px;color: black;")
        label1.setGeometry(50, 50, 400, 100)
        label1.move(350,50)

        label2 = QtWidgets.QLabel(self)
        label2.setText("Spielen")
        label2.setStyleSheet("font-size: 18px;color: black;")
        label2.setGeometry(50, 50, 400, 100)
        label2.move(450, 120)
        self.label2.mousePressEvent = self.spielen

        label3 = QtWidgets.QLabel(self)
        label3.setText("Settings")
        label3.setStyleSheet("font-size: 18px;color: black;")
        label3.setGeometry(50, 50, 400, 100)
        label3.move(450, 200)
        self.label3.mousePressEvent = self.settings

        label4 = QtWidgets.QLabel(self)
        label4.setText("Credits")
        label4.setStyleSheet("font-size: 18px;color: black;")
        label4.setGeometry(50, 50, 400, 100)
        label4.move(450, 280)
        self.label4.mousePressEvent = self.credits

        QToolTip.setFont(QFont("Arial", 10 ))
        button = QPushButton("Spiel beenden", self)
        button.setGeometry(50,50,150,50)
        button.setFont(QFont("Arial", 12))
        button.move(820, 420)
        button.setToolTip("<b>Button lel</b>")
        button.clicked.connect(QtCore.QCoreApplication.instance().quit)
        button.clicked.connect(self.gedruekt)
        button.setStyleSheet("background-color: white;")

        self.setGeometry(50,50,1000,500)
        self.setWindowTitle("Gui lalal einhorn")
        self.setWindowIcon(QIcon("cookie.png"))
        self.setAutoFillBackground(True)
        self.setStyleSheet("background-color: lightblue;")
        self.move(500, 250)
        self.show()

    def spielen(self, event):
        print("spielen")

    def settings(self, event):
        print("settings")

    def credits(self, event):
        print("credits")

    def gedruekt(self):
        print("Er hats getan ;(")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    sys.exit(app.exec_())
else:
    print("Gui not created, because script used at liabary")

1 ответ

Решение

Проблема в том, что переменные не являются членами классов, поэтому нет необходимости использовать self Например, для этого он меняется, например:

self.label2.mousePressEvent = self.spielen

чтобы:

label2.mousePressEvent = self.spielen

Если вы хотите использовать connect, это только для сигналов, для этого мы создадим собственный класс QLabel, подобный следующему:

class Label(QLabel):
    clicked = pyqtSignal()
    def __init__(self, parent=None):
        QLabel.__init__(self, parent=parent)

    def mousePressEvent(self, event):
        self.clicked.emit()

В этом случае вы будете выглядеть следующим образом:

class Label(QLabel):
    clicked = pyqtSignal()
    def __init__(self, parent=None):
        QLabel.__init__(self, parent=parent)

    def mousePressEvent(self, event):
        self.clicked.emit()

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.initMe()

    def initMe(self):

        label1 = QLabel(self)
        label1.setText("Überschrift mit namen des text adventure")
        label1.setStyleSheet("font-size: 18px;color: black;")
        label1.setGeometry(50, 50, 400, 100)
        label1.move(350,50)

        label2 = Label(self)
        label2.setText("Spielen")
        label2.setStyleSheet("font-size: 18px;color: black;")
        label2.setGeometry(50, 50, 400, 100)
        label2.move(450, 120)
        label2.clicked.connect(self.spielen)

        label3 = Label(self)
        label3.setText("Settings")
        label3.setStyleSheet("font-size: 18px;color: black;")
        label3.setGeometry(50, 50, 400, 100)
        label3.move(450, 200)
        label3.clicked.connect(self.settings)

        label4 = Label(self)
        label4.setText("Credits")
        label4.setStyleSheet("font-size: 18px;color: black;")
        label4.setGeometry(50, 50, 400, 100)
        label4.move(450, 280)
        label4.clicked.connect(self.credits)

        QToolTip.setFont(QFont("Arial", 10 ))
        button = QPushButton("Spiel beenden", self)
        button.setGeometry(50,50,150,50)
        button.setFont(QFont("Arial", 12))
        button.move(820, 420)
        button.setToolTip("<b>Button lel</b>")
        button.clicked.connect(self.close)
        button.clicked.connect(self.gedruekt)
        button.setStyleSheet("background-color: white;")

        self.setGeometry(50,50,1000,500)
        self.setWindowTitle("Gui lalal einhorn")
        self.setWindowIcon(QIcon("cookie.png"))
        self.setAutoFillBackground(True)
        self.setStyleSheet("background-color: lightblue;")
        self.move(500, 250)
        self.show()

    def spielen(self):
        print("spielen")

    def settings(self):
        print("settings")

    def credits(self):
        print("credits")

    def gedruekt(self):
        print("Er hats getan ;(")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    sys.exit(app.exec_())
Другие вопросы по тегам