如何仅修改PyQt5部件背景色?解决Fusion样式失焦变色问题
PyQt5 Fusion样式下进度条失焦后变色问题及解决困惑
使用PyQt5的Fusion样式时,窗口失去焦点后,QProgressBar的蓝色进度块会变为白色,希望能始终保持蓝色。尝试两种样式设置方式均存在问题:
- 通过
app.setStyleSheet("QProgressBar::chunk { background-color : blue}")全局设置进度块颜色时,进度条的文本不再居中,还出现其他异常; - 通过
self.pbar.setStyleSheet("background-color : blue")给单个进度条设置样式时,能保持文本居中,但不知道如何单独对进度块(chunk元素)进行样式设置。
以下是测试脚本:
import sys import time from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QWidget, QPushButton, QProgressBar, QVBoxLayout, QApplication class Thread(QThread): _signal = pyqtSignal(int) def __init__(self): super(Thread, self).__init__() def __del__(self): self.wait() def run(self): for i in range(100): time.sleep(0.1) self._signal.emit(i) class Example(QWidget): def __init__(self): super(Example, self).__init__() self.setWindowTitle('QProgressBar') self.btn = QPushButton('Click me') self.btn.clicked.connect(self.btnFunc) self.pbar = QProgressBar(self) self.pbar.setValue(0) self.resize(300, 100) self.vbox = QVBoxLayout() self.vbox.addWidget(self.pbar) self.vbox.addWidget(self.btn) self.setLayout(self.vbox) self.show() def btnFunc(self): self.thread = Thread() self.thread._signal.connect(self.signal_accept) self.thread.start() self.btn.setEnabled(False) def signal_accept(self, msg): self.pbar.setValue(int(msg)) if self.pbar.value() == 99: self.pbar.setValue(0) self.btn.setEnabled(True) if __name__ == "__main__": app = QApplication(sys.argv) app.setStyle("Fusion") ##### 窗口失去焦点时,进度条会从蓝色变为白色 ex = Example() ex.show() sys.exit(app.exec_())
窗口获得焦点时效果:
窗口失去焦点时效果:
内容的提问来源于stack exchange,提问作者David Rouyre
相关产品推荐
相关产品推荐

