2010-01-04 130 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_()