Цвет фона QFrame перекрывается с другими виджетами, такими как QLineEdit, QListBoxWidget и т. д. Как этого избежать?

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

QLineEdit и QListWidget, размещенные в QVBoxLayout. А затем QVBoxLayout поместил QFrame с таблицей стилей цвета фона: оранжевый.

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()

person Kumar    schedule 27.05.2020    source источник


Ответы (1)


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

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

введите здесь описание изображения

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

person eyllanesc    schedule 27.05.2020
comment
hai @eyllanesc, Предположим, если мы вызовем таблицу стилей из функции, как мы это сделаем? Например, def func_Qframe_stylesheet_001(self): return QFrame{цвет фона: 'оранжевый';} - person Kumar; 27.05.2020
comment
@Кумар я тебя не понимаю - person eyllanesc; 27.05.2020
comment
@eyllanesc, я создаю свою таблицу стилей как функцию/метод и называю ее . Теперь, как я могу решить эту проблему? - person Kumar; 27.05.2020
comment
@Kumar Кажется, вы мало что знаете о python (рекомендую проверить ваши заметки), поскольку то, что вы просите, тривиально: измените на return "QFrame#frame{background-color:orange}" и добавьте your_framesetObjectName("frame") - person eyllanesc; 27.05.2020
comment
Да, мистер @eyllanesc, вы абсолютно правы. Я новичок в Python, не только в Python, я новичок в программе, с помощью знающего человека, такого как вы, я буду двигаться дюйм за дюймом. Большое спасибо. - person Kumar; 27.05.2020
comment
@Kumar К сожалению, SO не является местом обучения, поэтому в следующий раз, когда вы зададите тривиальные вопросы, я не буду на них отвечать. Пока - person eyllanesc; 27.05.2020