PyQt5: невозможно стилировать классы из другого файла - PullRequest
0 голосов
/ 19 апреля 2020

Я делаю свои собственные классы расширенными с QWidget. Когда стиль и класс находятся в одном файле, нет проблем с их оформлением.

main.py

from PyQt5 import QtWidgets
from widgets import HistoryWidget, RandomBtn


class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        hw = HistoryWidget()
        btn = RandomBtn()
        layout = QtWidgets.QGridLayout()
        layout.addWidget(hw)
        layout.addWidget(btn)
        self.setLayout(layout)
        self.setGeometry(0, 0, 400, 400)


if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    main = MainWindow()
    main.show()
    stylesheet = """

   MainWindow {
       background-color: #1c1c1c;
   }

   HistoryWidget {
       background-color: #cadd45;
   }

   QLabel {
        color: white;
   }

   RandomBtn {
       background-color: #cadd45;
   }

   """
    app.setStyleSheet(stylesheet)
    app.exec()

Однако, когда класс находится в другом файле, он, похоже, не находит этот элемент (класс) в стиле

widgets.py

from PyQt5 import QtWidgets, QtCore


class HistoryWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setLayout(QtWidgets.QGridLayout())
        l = QtWidgets.QLabel("Hello")
        self.layout().addWidget(l)
        self.setFixedSize(QtCore.QSize(100, 100))


class RandomBtn(QtWidgets.QPushButton):
    def __init__(self):
        super().__init__()
        self.setFixedSize(QtCore.QSize(100, 100))

Вы можете видеть, что кнопка затронута, но виджет - нет. Есть идеи, что с этим делать? Спасибо

...