pyqt5 qtablewidget 编辑单元格时的单元格背景
pyqt5 qtablewidget cell background while editing cell
self.grid.setStyleSheet("QTableWidget::item::selected { background-color:#F9F6F5 ; color:black;
border: 3px solid black; }")
目前我正在使用 styleSheet 作为我的 qtablewidget 背景,当我 select 一个项目它改变了那个单元格的背景
like this 这就是我想要的
但是当我开始编辑时它回到了默认设置 like this 我不知道我应该使用哪个关键字而不是 'item::selected' 或者它是否存在
您可以使用 descendant css selector,它可以用来为另一个 widget 的后代指定样式(它可以是直接子代, “孙子”等)。
如果项目有字符串值,项目视图的编辑通常使用 QLineEdit 完成,解决方案是使用 QTableWidget QLineEdit
,并且由于样式将相同,您还可以连接选择器带逗号:
self.grid.setStyleSheet('''
QTableWidget::item::selected, <b>QTableWidget QLineEdit</b> {
background-color: #F9F6F5;
color: black;
border: 3px solid black;
}
''')
请注意,您需要后代选择器,而不是 子选择器 (parent > child
),它仅适用于 直接子 : 项目视图的编辑器不是视图的直接子视图,因为项目视图具有以下层次结构:
项目视图 -> 视口(可滚动的内容)-> 编辑器
如果您在 table 小部件上设置样式表,甚至不需要后代选择器,因为它会自动应用于应用 css 的小部件的所有子部件.
如果其他数据类型用于 Qt.DisplayRole
(或者更准确地说,Qt.EditRole
),您应该根据类型使用相关的小部件:例如,如果您将值设置为整数,将使用 QSpinBox,因此选择器将为 QTableWidget QSpinBox
.
除了 strings 和 bool(使用 QComboBox)之外,所有其他标准编辑小部件都是 QAbstractSpinBox 的子class,因此您可以只使用父 class 代替(在以下示例中我假设 self.grid
是一个 QTableWidget):
self.grid.setStyleSheet('''
QTableWidget::item::selected,
QLineEdit, QComboBox, QAbstractSpinBox {
...
}
''')
如果样式表设置在父级上(例如,主 window,甚至整个应用程序),您仍然需要后代选择器:
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# ...
self.setStyleSheet('''
QTableWidget::item::selected,
QTableWidget QLineEdit,
QTableWidget QComboBox,
QTableWidget QAbstractSpinBox {
...
}
''')
self.grid.setStyleSheet("QTableWidget::item::selected { background-color:#F9F6F5 ; color:black;
border: 3px solid black; }")
目前我正在使用 styleSheet 作为我的 qtablewidget 背景,当我 select 一个项目它改变了那个单元格的背景 like this 这就是我想要的
但是当我开始编辑时它回到了默认设置 like this 我不知道我应该使用哪个关键字而不是 'item::selected' 或者它是否存在
您可以使用 descendant css selector,它可以用来为另一个 widget 的后代指定样式(它可以是直接子代, “孙子”等)。
如果项目有字符串值,项目视图的编辑通常使用 QLineEdit 完成,解决方案是使用 QTableWidget QLineEdit
,并且由于样式将相同,您还可以连接选择器带逗号:
self.grid.setStyleSheet('''
QTableWidget::item::selected, <b>QTableWidget QLineEdit</b> {
background-color: #F9F6F5;
color: black;
border: 3px solid black;
}
''')
请注意,您需要后代选择器,而不是 子选择器 (parent > child
),它仅适用于 直接子 : 项目视图的编辑器不是视图的直接子视图,因为项目视图具有以下层次结构:
项目视图 -> 视口(可滚动的内容)-> 编辑器
如果您在 table 小部件上设置样式表,甚至不需要后代选择器,因为它会自动应用于应用 css 的小部件的所有子部件.
如果其他数据类型用于 Qt.DisplayRole
(或者更准确地说,Qt.EditRole
),您应该根据类型使用相关的小部件:例如,如果您将值设置为整数,将使用 QSpinBox,因此选择器将为 QTableWidget QSpinBox
.
除了 strings 和 bool(使用 QComboBox)之外,所有其他标准编辑小部件都是 QAbstractSpinBox 的子class,因此您可以只使用父 class 代替(在以下示例中我假设 self.grid
是一个 QTableWidget):
self.grid.setStyleSheet('''
QTableWidget::item::selected,
QLineEdit, QComboBox, QAbstractSpinBox {
...
}
''')
如果样式表设置在父级上(例如,主 window,甚至整个应用程序),您仍然需要后代选择器:
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# ...
self.setStyleSheet('''
QTableWidget::item::selected,
QTableWidget QLineEdit,
QTableWidget QComboBox,
QTableWidget QAbstractSpinBox {
...
}
''')