PyQt: сбросить или удалить цвет фона из QTreeWidgetItem

Как удалить фоновый цвет QTreeWidgetItem или сбросить его по умолчанию?

 treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green')) 

Вы можете получить цвет фона с помощью этого:

 treeWidgetItem.background(0) 

возвращая что-то вроде:

 <PySide.QtGui.QBrush(QColor(ARGB 1, 0, 0, 0) , NoBrush ) at 0x00000000EB1F6588> 

Теперь поставьте это в строку, прежде чем применять изменения, и у вас есть ответ.

 originalBG = treeWidgetItem.background(0) # New background treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green')) # Old background treeWidgetItem.setBackgroundColor(0, originalBG) 

Я не уверен, есть ли способ сделать это с помощью setBackgroundColor , но я бы использовал setStyleSheet .

Работа стилей с каждым QtGui и более простая в использовании.

Если вы хотите установить QTreeWidget фона QTreeWidget в зеленый цвет:

  self.TreeWidgetItem = QtGui.QTreeWidgetItem() self.TreeWidgetItem.setStyleSheet("background-color: green;") 

Если вы хотите сбросить таблицу стилей QTreeWidget, просто введите это:

  self.TreeWidgetItem.setStyleSheet("") 

Это приведет к сбросу любого цвета виджета по умолчанию, без каких-либо исключений.

Также хорошей практикой является использование системы таблицы qt, она проста и имеет много преимуществ.

Значение по умолчанию может зависеть от ОС и других факторов.

Поскольку вы изменили цвет фона с помощью

 treeWidgetItem.setBackgroundColor(0, QtGui.QColor('green')) 

вы можете также прочитать кисть по умолчанию перед

 default_tree_widget_item_brush = treeWidgetItem.background(column) 

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


Sidenote: В Qt 5.6, похоже, нет метода setBackgroundColor для QTreeWidgetItems , только setBackground . Таким образом, решение может немного зависеть от используемой версии Qt.

Я успешно удалил цвет фона, установив его прозрачным белым.

 treeWidgetItem.setBackgroundColor(0, QtGui.QColor(255, 255, 255, 0)) 

Это также работает с темными темами рабочего стола.

Но поскольку метод setBackgroundColor устарел, я теперь использую:

 treeWidgetItem.setBackground(0, QtGui.QBrush(QtGui.QColor(255, 255, 255, 0))) 

Правильный метод состоит в том, чтобы очистить базовые данные, например:

 treeWidgetItem.setData(0, QtCore.Qt.BackgroundRole, None) 

Стоит отметить, что когда фон не был установлен, метод background() фактически вернет нулевой QBrush а не None . Это связано с тем, что базовый код Qt делает это:

 return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole)) 

Поэтому он принимает нулевой QVariant (который эквивалентен None , в терминах PyQt) и отбрасывает его на нулевой QBrush что означает, что он не представляет цвета системы по умолчанию и не может быть использован для сброса исходных значений.