Таблица стилей PyQt5 для потомка QWidget, чтобы изменить QWidget - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть QWidget с HBoxLayout внутри. Внутри этого HBoxLayout есть несколько кнопок и объект QLineEdit. Используя таблицы стилей, я хотел бы сделать так, чтобы, когда фокусировался QLineEdit, QWidget получал синий контур / границу.

Я пробовал:

QSearchWidgetStyleSheet = QWidget {background-color: rgb(27,27,27); border: none; margin: 0px; border-radius: 3px; padding: 0px;}
                          QLineEdit:focus {border: 3px solid rgb(100,100,100;}

С Моя QLineEdit таблица стилей выглядит так:

QLineEditStyleSheet = QLineEdit {color: white; background-color: rgb(255,255,255,0); border: none; height: 32px; border-radius: 3px; margin-left: 3px; margin-right: 3px;}

Однако, QWidget не влияет на фокусировку QLineEdit. Что я должен изменить, чтобы QWidget получил границу / контур, когда QLineEdit сфокусирован?

1 Ответ

1 голос
/ 29 февраля 2020

QLineEdit:focus применяет стиль к QLineEdit, а не к QWidget. Хотя дочерние виджеты могут использовать таблицу стилей своего родительского виджета, я не думаю, что это работает наоборот в общем синтаксисе таблиц стилей. Вместо этого вы можете описать сценарий только с учетом QWidget ... Он должен иметь границу, когда он не в фокусе, и не должен иметь границу, когда он в фокусе.

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

class Widget(QWidget):

    def __init__(self):
        super().__init__()
        hbox = QHBoxLayout(self)
        hbox.addWidget(QPushButton('Push'))
        hbox.addWidget(QLineEdit())
        self.setAttribute(Qt.WA_StyledBackground, True)
        self.setStyleSheet('''
        Widget {
            border: 3px solid blue;
        }
        Widget:focus {
            border: none;
        }''')

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.setFocus()


class Template(QWidget):

    def __init__(self):
        super().__init__()
        grid = QGridLayout(self)
        grid.addWidget(Widget(), 0, 0)
        self.resize(300, 300)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Template()
    gui.show()
    sys.exit(app.exec_())

Конечно, если вы открыты для использования других методов, таких как сигналы и слоты, вы можете добиться более точного выполнения этих функций.

...