【问题标题】:How to add in PQT5 a event to a label如何在 PQT5 中将事件添加到标签
【发布时间】:2017-07-21 14:14:28
【问题描述】:

我的问题是我想分别在标签中添加一个事件,在我的情况下是 mousePressEvent。但它在此文本下不起作用是我的一些代码不起作用。

self.label2.mousePressEvent = self.credits

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

这里我得到错误 AttributeError: 'Window' object has no attribute '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")

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qlabel


    【解决方案1】:

    问题是变量不是类的成员,所以没有必要使用self 实例,例如,它会改变:

    self.label2.mousePressEvent = self.spielen
    

    到:

    label2.mousePressEvent = self.spielen
    

    如果您想使用连接,这仅适用于信号,为此我们创建一个自定义 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_())
    

    【讨论】:

    • 是的,谢谢它有效。这是我在python中的第一个程序,这就是我不太好的原因^^
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-10-08
    相关资源
    最近更新 更多