PyQt4 - 小部件未显示
我用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 个回答
0
试着在改变颜色之前,把autoFillBackground设置为True(也就是在调用setStylesheet之前)。还有,我觉得你需要设置调色板。这个评论是基于你提到“控件的颜色没有显示”这个假设的。请检查一下语法,因为下面的例子是针对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())
2
你需要给这个小部件添加一个绘制事件。
#!/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_()
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())