簡體   English   中英

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 背景,當我選擇一個項目時,它會像這樣更改該單元格的背景,這正是我想要的

但是當我開始編輯它恢復為默認設置,這樣,我不知道我應該使用哪些關鍵字來代替“項目::選擇”,或者如果它存在的話

您可以使用后代css 選擇器,它可用於指定作為另一個后代的小部件的樣式(它可以是直系子、“孫子”等)。

如果項目具有字符串值,則項目視圖的編輯通常使用 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 {
                ...
            }
        ''')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM