Фон виджета Qt отличается от Linux до Windows

Я собираюсь реализовать кроссплатформенную программу Qt. У меня есть одна проблема, которую я не понимаю: когда программа выполняется в Windows, я получаю неправильный цвет фона для некоторых виджетов. Во-первых, я написал программу на C ++ с теми же результатами, так что я думаю, что это не специфическая проблема Python.

Я сократил свой код до простой программы, которая показывает «ошибку». Я не уверен, какой виджет вызывает его, поэтому я просто включил все элементы, которые используются в реальной программе.

Вот как это выглядит в Linux:

Виджет в Linux

И вот рендеринг Windows с неправильным фоном:

Виджет в Linux

Вот код:

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)

Как я могу получить и установить правильный цвет фона (тот, что из QGroupBox)?

Заранее спасибо за всю помощь по этому поводу!

1

Решение

Эй, некоторое время назад я столкнулся с подобной проблемой и исправил ее, добавив стили Windows, которые отличаются от стилей по умолчанию:

Вот мой основной пример, который работает так, как вы хотите:

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, поэтому вы должны расширить свой импорт

1

Другие решения

Я наконец выяснил, что вызывает это. Это фон QScrollArea (который, вероятно, использует то же самое, что и QTabWidget в моей установке Linux, так что я его не видел).

Простое определение фона QScrollArea как прозрачного решает его:

self.scoreBoxScroll.setStyleSheet('QScrollArea { background-color: transparent; }')
1

По вопросам рекламы [email protected]