Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在其他Qt对象上应用Qt伪状态_Python_Pyqt_Pyqt5_Qtstylesheets - Fatal编程技术网

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中,并使用后代选择器或子选择器设置样式?效果非常好,遗憾的是,这看起来像是一个问题,但我将以这种方式实现它。我认为有一种方法可以处理一个对象的属性。