如何在 PQT5 中将事件添加到标签
How to add in PQT5 a event to a label
我的问题是我想在标签上分别添加一个事件,在我的情况下 mousePressEvent.But 它在这段文本下不起作用是我的一些代码不起作用。
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")
问题是变量不是 classes 的成员,因此没有必要使用 self
实例,为此它发生了变化,例如:
self.label2.mousePressEvent = self.spielen
至:
label2.mousePressEvent = self.spielen
如果您想使用连接,这仅适用于信号,为此我们创建一个自定义 QLabel class,如下所示:
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_())
我的问题是我想在标签上分别添加一个事件,在我的情况下 mousePressEvent.But 它在这段文本下不起作用是我的一些代码不起作用。
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")
问题是变量不是 classes 的成员,因此没有必要使用 self
实例,为此它发生了变化,例如:
self.label2.mousePressEvent = self.spielen
至:
label2.mousePressEvent = self.spielen
如果您想使用连接,这仅适用于信号,为此我们创建一个自定义 QLabel class,如下所示:
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_())