palette.setcolor
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了palette.setcolor相关的知识,希望对你有一定的参考价值。
QT程序 ,说一下各句的含义
QPalette palette=distextedit->palette();
const QColor&color=QColorDialog::getColor(palette.color(QPalette::Base),this);
if (color.isValid())
palette.setColor(QPalette::Base,color);
distextedit->setPalette(palette);
QPalette palette=distextedit->palette();
// 创建一个调色板对象,该对象与distextedit现有配色方案一致
//(因为程序只改变 Base 的颜色,而其它颜色不变)
const QColor&color=QColorDialog::getColor(palette.color(QPalette::Base),this);
// 利用颜色对话框让用户选择颜色,并存储于color中
if (color.isValid())
// 检测color是否有效(用户可能选择了对话框中的取消按钮)
palette.setColor(QPalette::Base,color);
// 设置调试板中的Base颜色为用户选择的那个颜色color
distextedit->setPalette(palette);
// 设置distextedit的调色板为palette,也就是Base的颜色改成了color,
PyQt5 动态更改应用程序主题/调色板
【中文标题】PyQt5 动态更改应用程序主题/调色板【英文标题】:PyQt5 change app theme/palette dynamically 【发布时间】:2018-09-12 06:19:45 【问题描述】:我可以成功地创建一个新的调色板并在启动时将它设置为 QApplication。但是,一旦应用程序运行,我就不能再更改调色板的颜色了。如果用户选择特定主题,我想更改按钮的颜色。当前在启动时有效但以后不可用的代码如下:
palette = QtGui.QPalette()
palette.setColor(QtGui.QPalette.Window, QtGui.QColor(3, 18, 14))
palette.setColor(QtGui.QPalette.Base, QtGui.QColor(15, 15, 15))
palette.setColor(QtGui.QPalette.AlternateBase, QtGui.QColor(53, 53, 53))
palette.setColor(QtGui.QPalette.ToolTipBase, QtCore.Qt.white)
palette.setColor(QtGui.QPalette.Text, QtCore.Qt.white)
palette.setColor(QtGui.QPalette.Button, QtGui.QColor(53, 53, 53))
palette.setColor(QtGui.QPalette.ButtonText, QtCore.Qt.white)
palette.setColor(QtGui.QPalette.BrightText, QtCore.Qt.red)
palette.setColor(QtGui.QPalette.Highlight, QtGui.QColor(142, 45, 197).lighter())
palette.setColor(QtGui.QPalette.HighlightedText, QtCore.Qt.black)
app.setPalette(palette)
如果在插槽中使用相同的调色板对象不会改变颜色。例如槽中的代码:
palette.setColor(QtGui.QPalette.Button, QtGui.QColor(53, 53, 53))
app.setPalette(palette)
有人可以告诉我我在这里缺少什么吗? 谢谢。
编辑: 我刚刚发现它只修改了一些区域。例如,在我编写的插槽中,它会更改高亮颜色,但不会更改 QTab 颜色(通过将颜色设置为 Button 来设置)。我当前的插槽代码:
def change_theme(self):
pal = QtWidgets.QApplication.palette()
#The next line works
pal.setColor(QtGui.QPalette.Highlight, QtGui.QColor(0, 0, 128))
#The next line doesnt work. Expected it to change the Tab Widget color
#using this line.
pal.setColor(QtGui.QPalette.Button, QtGui.QColor(62, 80, 91))
QtWidgets.QApplication.setPalette(pal)
【问题讨论】:
【参考方案1】:尝试设置app.setStyle('Fusion')
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication
from PyQt5.QtGui import QPalette, QColor
class Window(QWidget):
def __init__(self):
super().__init__()
self.flag = False
self.button = QPushButton('change the colors of the buttons', self)
self.button.clicked.connect(self.click)
lay = QVBoxLayout(self)
lay.addWidget(self.button)
self.palette = self.palette()
self.palette.setColor(QPalette.Window, QColor(3, 18, 14))
self.palette.setColor(QPalette.Button, QColor('red'))
self.setPalette(self.palette)
def click(self):
print("click")
if not self.flag:
self.palette.setColor(QPalette.Button, QColor(62, 80, 91))
else:
self.palette.setColor(QPalette.Button, QColor(0, 0, 128))
self.setPalette(self.palette)
self.flag = not self.flag
if __name__ == '__main__':
import sys
app = QApplication([])
app.setStyle('Fusion') # <-----
w = Window()
w.show()
sys.exit(app.exec_())
【讨论】:
以上是关于palette.setcolor的主要内容,如果未能解决你的问题,请参考以下文章