2010-01-04 112 views
1

我没有显示在Python广告这个园艺计划的Qt4PyQt的,小部件

#!/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_() 

的intrpreter不给我任何错误,但“有色”窗口小部件不显示。为什么? 谢谢

+0

类colorButton(QtGui.QWidget)缺少一个“:”,但这样会产生一个SyntaxError ... – miku 2010-01-04 16:15:09

+1

在Python中,类名一般用大写字母开头。 – 2010-01-04 22:32:00

回答

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()) 
+0

不,它不工作....无论如何,谢谢! – Lopoc 2010-01-04 16:18:44

+0

尝试我刚发布的新代码,谢谢 – apt 2010-01-04 16:28:31

4

你的类colorButtonQWidget继承,但是你调用构造函数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()) 
+0

我已经纠正了在这两种情况下的对象QtGui.Qwidget,但现在!它仍然不会出现 – Lopoc 2010-01-04 16:30:19

+0

我不知道你在做什么,但是当我在替换'colorButton'定义后运行你的代码时,我看到了棕色按钮。 – 2010-01-04 16:33:39

+0

嗯,它的工作原理,但我不想要一个QPushButton。故意我正在使用QWidget主题。 – Lopoc 2010-01-04 16:36:00

0

我认为你需要给你的ColorDialog类使用

self.setLayout(SOME_LAYOUT) 

那么你的按钮添加到该布局布局像

self.layout().addItem(button) 

否则我不知道如果简单地给你的按钮的C作为父对象的olorDialog足以显示。

1

您需要给widget一个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_()