QPalette 初学者 - 从哪里开始

Posted

技术标签:

【中文标题】QPalette 初学者 - 从哪里开始【英文标题】:QPalette for beginners - where to start 【发布时间】:2017-03-14 17:27:53 【问题描述】:

我最近制作了我的第一个 python 和 PyQt 程序,现在我正在寻找使用颜色来让它看起来不错。我一直在查看文档,QPalette documentation 似乎建议使用 QPalette 而不是手动设置每个小部件的颜色。问题是我找不到很多关于如何在实践中使用它的信息,虽然对于像我这样的初学者来说,文档中肯定有很多数据,但很多例子都缺乏!

据我了解,我的目标是在 QPalette 对象中为我的应用程序建立某种“全局”颜色,然后将该调色板分配给我的所有小部件,对吗?那么解决这个问题的最佳方法是什么?例如,我想将所有按钮设置为深灰色背景。查看文档,您似乎需要使用 .setColor 设置 QPalette.button() 颜色,但我无法使其正常工作(参见第 83 行)。但我能够在其上方专门设置对话框的背景颜色。

这只是我的代码的 Gui 部分:

import sys
from PyQt4 import QtGui, QtCore

class BatchTable(QtGui.QTableWidget):
    def __init__(self, parent):
        super(BatchTable, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setColumnCount(5)
        self.setColumnWidth(1,50)
        self.hideColumn(1)
        self.hideColumn(3)
        self.hideColumn(4)
        self.horizontalHeader().setStretchLastSection(True)
        self.setHorizontalHeaderLabels(QtCore.QString("Status;Alpha;File;Full Path;Process ID").split(";"))

class ffmpegBatch(QtGui.QWidget):
    def __init__(self):
        super(ffmpegBatch, self).__init__()
        self.initUI()

    def initUI(self):
        self.pBar = QtGui.QProgressBar()

        self.edit = QtGui.QTextEdit()

        cmdGroup = QtGui.QGroupBox("Commandline arguments")
        self.alphaCheck = QtGui.QCheckBox("Output alpha as separate file")
        fpsLbl = QtGui.QLabel("FPS:")
        self.fpsCombo = QtGui.QComboBox()
        self.fpsCombo.addItem("29.97")
        self.fpsCombo.addItem("23.976")
        hbox1 = QtGui.QHBoxLayout()
        hbox1.addWidget(self.alphaCheck)
        hbox1.addWidget(fpsLbl)
        hbox1.addWidget(self.fpsCombo)
        cmdGroup.setLayout(hbox1)

        saveGroup = QtGui.QGroupBox("Output")
        saveLocationBox = QtGui.QHBoxLayout()
        self.outputLocation = QtGui.QLineEdit()
        self.popBtn = QtGui.QPushButton("Pop dir")
        saveLocationBox.addWidget(self.outputLocation)
        saveLocationBox.addWidget(self.popBtn)

        saveBtnsBox = QtGui.QHBoxLayout()
        pasteFromClipboard = QtGui.QPushButton("Paste from clipboard")
        upOneBtn = QtGui.QPushButton("./")
        upTwoBtn = QtGui.QPushButton("././")
        saveBtnsBox.addWidget(pasteFromClipboard)
        saveBtnsBox.addWidget(upOneBtn)
        saveBtnsBox.addWidget(upTwoBtn)

        saveMasterBox = QtGui.QVBoxLayout()
        saveMasterBox.addLayout(saveLocationBox)
        saveMasterBox.addLayout(saveBtnsBox)

        saveGroup.setLayout(saveMasterBox)

        self.runBtn = QtGui.QPushButton("Run Batch Transcode")

        showDebugger = QtGui.QPushButton("Show debugger")
        showDebugger.setCheckable(True)

        self.mainBox = QtGui.QVBoxLayout()
        self.table = BatchTable(self)
        self.mainBox.addWidget(self.table)
        self.mainBox.addWidget(cmdGroup)
        self.mainBox.addWidget(saveGroup)
        self.mainBox.addWidget(self.runBtn)
        self.mainBox.addWidget(self.pBar)
        self.mainBox.addWidget(showDebugger)
        self.mainBox.addWidget(self.edit)
        self.edit.hide()

        self.setLayout(self.mainBox)
        self.setGeometry(300, 300, 600, 700)
        self.setWindowTitle('FFMPEG Batch Converter')

        # make pretty
        palette = QtGui.QPalette()
        palette.setColor(self.backgroundRole(), QtGui.QColor(40, 40, 40))
        self.setPalette(palette)
        palette.setColor(palette.button(), QtGui.QColor(100, 100, 100))
        self.runBtn.setPalette(palette)

def main():
    app = QtGui.QApplication(sys.argv)
    ex = ffmpegBatch()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【问题讨论】:

你能显示你的代码吗? 是的,将其添加到原始问题中。例如,如何使“runBtn”背景变暗而文本变白? 【参考方案1】:

没关系,看起来带有级联的stylesheets 是一种更好的方法。例如将应用程序中的所有按钮设置为绝对漂亮的黄色:QApplication.setStyleSheet("QPushButton background: yellow ")

【讨论】:

以上是关于QPalette 初学者 - 从哪里开始的主要内容,如果未能解决你的问题,请参考以下文章

想学习编程但是不知道该从哪里开始学习。

响应式网页设计:从哪里开始(css模块)[关闭]

编程入门丨初学者入门编程最开始要注意的三点

初学者的Kubernetes圣经

初学者学好Java编程的必备清单,看看你差在哪里

如何从0开始学习大数据挖掘分析?