self.grid.setStyleSheet("QTableWidget::item::selected { background-color:#F9F6F5 ; color:black;
border: 3px solid black; }")
目前,我正在使用 styleSheet 作为 qtablewidget 背景,当我选择一个项目时,它会更改该单元格的背景 like this这就是我想要的
但是当我开始编辑时,它又恢复为默认设置 like this我不知道应该使用哪个关键字来代替 'item::selected' 或者它是否存在
最佳答案
您可以使用后代css selector ,它可用于指定另一个小部件的后代的样式(它可以是直接子项、“孙子”等)。
如果项目具有字符串值,则项目 View 的编辑通常使用 QLineEdit 完成,解决方案是使用 QTableWidget QLineEdit
,并且由于样式将相同,因此您也可以连接带逗号的选择器:
self.grid.setStyleSheet('''
QTableWidget::item::selected, <b>QTableWidget QLineEdit</b> {
background-color: #F9F6F5;
color: black;
border: 3px solid black;
}
''')
请注意,您需要后代选择器,而不是仅适用于直接子级的子选择器(parent > child
):编辑器项目 View 的 subview 不是该 View 的直接子级,因为项目 View 具有以下层次结构:
项目 View -> 视口(viewport)(可滚动内容) -> 编辑器
如果您在表格小部件上设置样式表,则甚至不需要后代选择器,因为它会自动应用于应用了 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 {
...
}
''')
关于python - 编辑单元格时pyqt5 qtablewidget单元格背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63777633/