2

我用 Python 和 Qt4 制作了这个程序。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


color = QtGui.QColor(99, 0, 0)

class colorButton(QtGui.QWidget):
    def __init__(self, args):
        QtGui.QWidget.__init__(self,args)
        self.setGeometry(150, 22, 50, 50)
        self.setStyleSheet("QWidget { background-color: %s }" % color.name())

class ColorDialog(QtGui.QWidget):
    def __init__(self, parent=None):

        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(40, 40, 220, 100)
        self.setWindowTitle('ColorDialog')

        button=colorButton(self)


app = QtGui.QApplication(sys.argv)
cd = ColorDialog()
cd.show()
app.exec_()

解释器没有给我任何错误,但没有显示“彩色”小部件。为什么?感谢

4

4 回答 4

4

您的类colorButton继承自QWidget,但您正在QPushButton.__init__()构造函数中调用。也许您希望它继承自QPushButton

通过使用以下类定义,您的代码适用于我:

class colorButton(QtGui.QPushButton):
    def __init__(self, *args):
        QtGui.QPushButton.__init__(self, *args)
        self.setGeometry(150, 22, 50, 50)
        self.setStyleSheet("QWidget { background-color: %s }" % color.name())
于 2010-01-04T16:22:19.760 回答
2

您需要给小部件一个paintEvent。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


color = QtGui.QColor(99, 0, 0)

class colorButton(QtGui.QWidget):
    def __init__(self, args):
        QtGui.QWidget.__init__(self,args)
        self.setGeometry(150, 22, 50, 50)

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.fillRect(event.rect(), color)

class ColorDialog(QtGui.QWidget):
    def __init__(self, parent=None):

        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(40, 40, 220, 100)
        self.setWindowTitle('ColorDialog')

        button=colorButton(self)


app = QtGui.QApplication(sys.argv)
cd = ColorDialog()
cd.show()
app.exec_()
于 2010-01-04T22:31:17.517 回答
0

在更改颜色之前(在 setStylesheet 调用之前)尝试将 autoFillBackground 设置为 True。我认为你需要设置托盘。此评论假定您的意思是“未显示小部件的颜色”。请检查语法,因为下面说明的语法是针对 Qt4.3 的,我没有检查最新的语法。设置托盘后,无需设置样式表。

class colorButton(QtGui.QWidget)
    def __init__(self, args):
        QtGui.QPushButton.__init__(self,args)
        self.setGeometry(150, 22, 50, 50)


    self.setAutoFillBackground(True)
    plt = QtGui.QPalette()      
    plt.setColor(QtGui.QPalette.Active,QtGui.QPalette.Window,color)
    plt.setColor(QtGui.QPalette.Inactive,QtGui.QPalette.Window,color)  
    plt.setColor(QtGui.QPalette.Disabled,QtGui.QPalette.Window,color
    self.setPalette(plt) 


    #self.setStyleSheet("QWidget { background-color: %s }" % color.name())
于 2010-01-04T16:15:18.627 回答
0

我认为你需要给你的 ColorDialog 一个布局使用

self.setLayout(SOME_LAYOUT)

然后将您的按钮添加到布局中,例如

self.layout().addItem(button)

否则,我不确定是否只需将 ColorDialog 作为父按钮即可显示。

于 2010-01-04T17:02:28.820 回答