PyQt 鼠标事件在我的 CSS QLabel 上不起作用
PyQt Mouse Event doesn't work on my QLabel with CSS
我在编程时使用特定的字体。但是字体的行间距比较窄,所以我用CSS单独定义行间距。但这就是问题所在。鼠标事件不工作。这是什么原因,我该怎么办?
这是我的代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.label = QLabel(self)
self.label.resize(200, 50)
self.label.setStyleSheet("border: 1px solid black;")
text = "Test mouse events on here"
self.label.setText("<p style='line-height:1.15'>{}</p>".format(text))
def mouseReleaseEvent(self, e):
if e.button() == QtCore.Qt.LeftButton:
print("Left")
if e.button() == QtCore.Qt.RightButton:
print("Right")
if e.button() == 8:
print("Left side")
if e.button() == 16:
print("Right side")
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec())
问题是因为当您放置富文本时,QLabel 消耗了鼠标事件,阻止它传播到父级。一种可能的解决方案是激活属性 Qt::WA_TransparentForMouseEvents:
self.label.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents, True)
我在编程时使用特定的字体。但是字体的行间距比较窄,所以我用CSS单独定义行间距。但这就是问题所在。鼠标事件不工作。这是什么原因,我该怎么办?
这是我的代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.label = QLabel(self)
self.label.resize(200, 50)
self.label.setStyleSheet("border: 1px solid black;")
text = "Test mouse events on here"
self.label.setText("<p style='line-height:1.15'>{}</p>".format(text))
def mouseReleaseEvent(self, e):
if e.button() == QtCore.Qt.LeftButton:
print("Left")
if e.button() == QtCore.Qt.RightButton:
print("Right")
if e.button() == 8:
print("Left side")
if e.button() == 16:
print("Right side")
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec())
问题是因为当您放置富文本时,QLabel 消耗了鼠标事件,阻止它传播到父级。一种可能的解决方案是激活属性 Qt::WA_TransparentForMouseEvents:
self.label.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents, True)