我即将实施一个跨平台的Qt程序。 我有一个问题,我不明白:当程序在Windows上执行时,我得到了一些小部件错误的背景颜色。 首先,我用C ++编写了程序,结果非常相似,所以我认为这不是Python特有的问题。
我把我的代码剥离成一个显示“错误”的简单程序。 我不确定哪个部件会导致它,所以我只是简单地包含了真正的程序中使用的所有元素。
下面是它在Linux上的外观:
这里是Windows渲染背景错误:
代码如下:
import sys from PyQt4.QtGui import QApplication, QMainWindow, QVBoxLayout, QTabWidget, QWidget, \ QGroupBox, QVBoxLayout, QScrollArea, QFrame, QHBoxLayout, \ QGridLayout, QLabel class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() mainWidget = QWidget(self) layout = QVBoxLayout(mainWidget) self.setCentralWidget(mainWidget) self.tabWidget = QTabWidget(self) layout.addWidget(self.tabWidget) self.scorePage = ScorePage() self.tabWidget.addTab(self.scorePage, 'Some Tab') self.scorePage.reload() class GameWidget(QWidget): def __init__(self): super(GameWidget, self).__init__() layout = QGridLayout(self) boogerLabel = QLabel(self) boogerLabel.setText('Some Text') layout.addWidget(boogerLabel, 0, 0) class ScorePage(QWidget): def __init__(self): super(ScorePage, self).__init__() layout = QVBoxLayout(self) self.scoreBox = QGroupBox(self) self.scoreBoxLayout = QVBoxLayout(self.scoreBox) layout.addWidget(self.scoreBox) self.scoreBoxScroll = QScrollArea(self.scoreBox) self.scoreBoxScroll.setFrameShape(QFrame.NoFrame) self.scoreBoxLayout.addWidget(self.scoreBoxScroll) self.scoreBoxWidget = QWidget(self) def reload(self): self.scoreBoxWidget.deleteLater() self.scoreBoxWidget = QWidget(self) self.scoreBoxWidgetLayout = QHBoxLayout(self.scoreBoxWidget) newGame = GameWidget() self.scoreBoxWidgetLayout.addWidget(newGame) self.scoreBoxScroll.setWidget(self.scoreBoxWidget) self.scoreBoxWidget.setAutoFillBackground(False) def main(argv): app = QApplication(sys.argv, True) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) if __name__ == "__main__": main(sys.argv)
我怎样才能得到和设置正确的backgrolund颜色(从QGroupBox的一个)?
预先感谢所有帮助!
嘿前一段时间,我遇到了类似的问题,我通过添加不同于默认值的窗口样式来解决这个问题:
这是我的主要你的例子,它的工作原理是:
def main(argv): app = QApplication(sys.argv, True) from platform import system if system() == "Windows": app.setStyle(QStyleFactory.create("windows")) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_())
QStyleFactory在QtGui中,所以你必须扩展你的导入
我终于明白了这是什么原因造成的。 这是QScrollArea的背景(它可能与我的Linux安装中的QTabWidget相同,所以我没有看到它)。
只需将QScrollArea的背景定义为透明即可解决该问题:
self.scoreBoxScroll.setStyleSheet('QScrollArea { background-color: transparent; }')