Python 在其他Qt对象上应用Qt伪状态
我有下面的测试脚本Python 在其他Qt对象上应用Qt伪状态,python,pyqt,pyqt5,qtstylesheets,Python,Pyqt,Pyqt5,Qtstylesheets,我有下面的测试脚本 from PyQt5.QtWidgets import * import sys class MW(QMainWindow): def __init__(self): super(MW, self).__init__() widget = QWidget() widget.setStyleSheet('QWidget {background-color:#000000; color:#FFFFFF}'
from PyQt5.QtWidgets import *
import sys
class MW(QMainWindow):
def __init__(self):
super(MW, self).__init__()
widget = QWidget()
widget.setStyleSheet('QWidget {background-color:#000000; color:#FFFFFF}'
"QPushButton:hover {background-color:#202020}")
self.setCentralWidget(widget)
box = QVBoxLayout(widget)
but1_box = QHBoxLayout()
but1 = QPushButton("Button 1")
lab1 = QLabel("Label 1")
but1_box.addWidget(but1)
but1_box.addWidget(lab1)
box.addLayout(but1_box)
but2_box = QHBoxLayout()
but2 = QPushButton("Button 2")
lab2 = QLabel("Label 2")
but2_box.addWidget(but2)
but2_box.addWidget(lab2)
box.addLayout(but2_box)
self.show()
app = QApplication(sys.argv)
mw = MW()
sys.exit(app.exec_())
如果我将鼠标悬停在按钮上,它会将其颜色更改为灰色,并且我希望相关标签在鼠标悬停在按钮上时更改其颜色。直接使用Qt样式表的伪状态是不可能实现的,但您必须使用一个eventFilter来检测鼠标悬停的更改(输入和离开)这会修改其他元素的样式表
从PyQt5.QtCore导入pyqtSignal、QEvent、QObject
从PyQt5.QtWidgets导入(
QApplication,
QHBoxLayout,
QLabel,
QMainWindow,
QPushButton,
QVBoxLayout,
QWidget,
)
导入系统
类HoverListener(QObject):
已输入=pyqtSignal()
leaved=pyqtSignal()
定义初始化(自我,小部件):
超级(HoverListener,self)。\uuuuu init\uuuuu(小部件)
self.\u widget=widget
self.widget.installEventFilter(self)
@财产
def小部件(自身):
返回self.\u小部件
def事件过滤器(自身、obj、事件):
如果obj==self.widget:
如果event.type()==QEvent.Enter:
self.entered.emit()
elif event.type()==QEvent.Leave:
self.leave.emit()
返回super(HoverListener,self).eventFilter(obj,event)
MW级(QMainWindow):
定义初始化(自):
超级(兆瓦,自我)。\uuuu初始
widget=QWidget()
widget.setStyleSheet(
“QWidget{背景色:#000000;颜色:#FFFFFF}”
“QPushButton:悬停{背景色:#202020}”
)
self.setCentralWidget(小部件)
但是1=QPushButton(“按钮1”)
lab1=QLabel(“标签1”)
hover_listener1=HoverListener(but1)
悬停\u侦听器1.entered.connect(
lambda label=lab1:label.setStyleSheet(“背景色:#202020”)
)
hover_listener1.leaved.connect(lambda label=lab1:label.setStyleSheet(“”)
但是2=QPushButton(“按钮2”)
lab2=QLabel(“标签2”)
hover_listener2=HoverListener(but2)
hover_listener2.entered.connect(
lambda label=lab2:label.setStyleSheet(“背景色:#202020”)
)
hover_listener2.leaved.connect(lambda label=lab2:label.setStyleSheet(“”)
box=QVBoxLayout(小部件)
但是1_box=QHBoxLayout()
but1\u box.addWidget(but1)
but1_box.addWidget(lab1)
框。添加布局(但1个框)
但是2_box=QHBoxLayout()
but2_box.addWidget(but2)
but2_box.addWidget(lab2)
框。添加布局(但2_框)
self.show()
app=QApplication(sys.argv)
mw=mw()
sys.exit(app.exec_())
也许更简单的选择是将它们放在同一个中间QWidget中,并使用后代选择器或子选择器设置样式?效果非常好,遗憾的是,这看起来像是一个问题,但我将以这种方式实现它。我认为有一种方法可以处理一个对象的属性。