Цвет фона QFrame перекрывается с другими виджетами, такими как QLineEdit, QListBoxWidget и т. Д. c. Как этого избежать? - PullRequest
3 голосов
/ 27 мая 2020

В моей программе

QLineEdit и QListWidget, помещенные в QVBoxLayout. И затем QVBoxLayout помещает в QFrame с таблицей стилей background-color: orange.

QLineEdit и QListWidget также получают тот же цвет фона, что и QFrame . Как избежать перекрытия цвета фона ? .

Предположим, если мы изменим цвет фона QListwidget с помощью таблицы стилей, тогда цвет полосы прокрутки также изменится на цвет QListWidget.

Как этого избежать? Мне нужен макет в собственном стиле?

import sys
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

item = ["Python", "Python 2.7", "Python 2.9", "Python 3.5", "Python 3.7", "National", "Zebra",
                "Apple", "X Ray","Boat", "Tiger", "Item001", "Item002", "Item003", "Item004", "Item005",
                "001Item", "002Item", "003Item","004Item", "005Item", "Ball", "Cat", "Dog", "Fish",
                "Gold Fish", "Star Fish"]


class myList(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Frame Example")
        self.myui()

    def myui(self):

        self.textbox = QLineEdit(self)
        self.listbox = QListWidget(self)
        self.listbox.addItems(item)

        vbox = QVBoxLayout()
        vbox.addWidget(self.textbox)
        vbox.addWidget(self.listbox)

        frame = QFrame()
        frame.setLayout(vbox)
        frame.setStyleSheet("background-color:orange")

        main_layout =QHBoxLayout()
        main_layout.addWidget(frame)
        self.setLayout(main_layout)

def main():
    myapp = QApplication(sys.argv)
    mywin = myList()
    mywin.show()
    sys.exit(myapp.exec_())

if __name__ == '__main__':
    main()

1 Ответ

3 голосов
/ 27 мая 2020

Вы должны установить селектор (например, objectName) в дополнение к указанию класса, на который он будет влиять:

frame = QFrame()
frame.setObjectName("frame")
frame.setLayout(vbox)
frame.setStyleSheet("QFrame#frame{background-color:orange}")

enter image description here

Для более подробно я рекомендую прочитать документы Qt:

...