【问题标题】:pyqt5 qtablewidget cell background while editing cell编辑单元格时的pyqt5 qtablewidget单元格背景
【发布时间】:2020-12-25 21:05:36
【问题描述】:
self.grid.setStyleSheet("QTableWidget::item::selected { background-color:#F9F6F5 ; color:black;  
border: 3px solid black; }")

目前,当我选择一个项目时,我正在使用 styleSheet 作为我的 qtablewidget 背景,它会更改该单元格的背景 like this这是我想要的

但是当我开始编辑时,它又回到了默认设置like this,我不知道应该使用哪个关键字来代替 'item::selected' 或者它是否存在

【问题讨论】:

    标签: python pyqt5 qtablewidget qtstylesheets


    【解决方案1】:

    您可以使用 descendant css selector,它可用于指定一个小部件的样式,该小部件是另一个小部件的后代(它可以是直接子代、“孙子代”等) .

    如果项目具有字符串值,通常使用 QLineEdit 编辑项目视图,解决方案是使用QTableWidget QLineEdit,并且由于样式将相同,您还可以使用逗号连接选择器:

    self.grid.setStyleSheet('''
        QTableWidget::item::selected, QTableWidget QLineEdit { 
            background-color: #F9F6F5; 
            color: black; 
            border: 3px solid black; 
        }
    ''')

    请注意,您需要后代选择器,而不是 子选择器 (parent > child),它仅适用于 直接子代:项目视图的编辑器不是视图的直接子视图,因为项目视图具有以下层次结构:

    项目视图 -> 视口(可滚动的内容) -> 编辑器

    如果您在表格小部件上设置样式表,甚至不需要后代选择器,因为它会自动应用于作为应用 css 的小部件的子小部件的所有小部件。

    如果Qt.DisplayRole(或更准确地说,Qt.EditRole)使用了其他数据类型,则应根据类型使用相对小部件:例如,如果将值设置为整数, QSpinBox 将被使用,所以选择器将是QTableWidget QSpinBox

    除了字符串和 bool(使用 QComboBox)之外,所有其他标准编辑小部件都是 QAbstractSpinBox 的子类,因此您可以改用该父类(在以下示例中,我假设 self.grid 是 QTableWidget) :

        self.grid.setStyleSheet('''
            QTableWidget::item::selected, 
            QLineEdit, QComboBox, QAbstractSpinBox {
                ...
            }
    ''')
    

    如果样式表设置在父级(例如,主窗口,甚至整个应用程序)上,您仍然需要后代选择器:

    class MyMainWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super().__init__()
            # ...
            self.setStyleSheet('''
                QTableWidget::item::selected, 
                QTableWidget QLineEdit, 
                QTableWidget QComboBox, 
                QTableWidget QAbstractSpinBox {
                    ...
                }
            ''')
    

    【讨论】:

    • 谢谢,我在哪里可以学到这些东西,我没有看到任何文档提到使用 Qlineedit 的 Qtablewidget 或者我在不同的网站上学习过诸如 item::selected、border... 之类的关键字跨度>
    • 所有可编辑项视图(QColumnView、QTableView、QTreeView、QListView 及其子类 QTableWidget、QTreeWidget 和 QListWidget)根据索引的数据类型为Qt.EditRole 创建一个编辑器(通常与Qt.DisplayRole):QLineEdit 用于字符串,QSpinBox 用于整数,QDoubleSpinBox 用于浮点数,QDateEdit 用于日期等。这显然意味着如果为表格小部件项设置不同类型的数据,则必须添加相应的编辑小部件类到 css。
    • QItemEditorFactory 文档中列出了默认提供的标准编辑小部件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多