2010-01-04 8 views
1

J'ai ce programme Hort ad Python Qt4PyQt widget ne montre

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

Le intrpreter ne me donne pas d'erreur, mais le widget "de couleur" est pas représenté. Pourquoi? thank

+0

classe ColorButton (QtGui.QWidget) manque un « : », mais cela produirait une SyntaxError ... – miku

+1

En Python, les noms de classe commencent généralement par une lettre majuscule. –

Répondre

0

Essayez de définir autoFillBackground sur True avant de modifier la couleur (avant l'appel setStylesheet). ET je pense que vous devez définir la palette. Ce commentaire suppose que vous vouliez dire "la couleur du widget n'est pas montrée". S'il vous plaît examiner la syntaxe comme celle illustrée ci-dessous est pour Qt4.3 et je n'ai pas vérifié le dernier. Après avoir défini la palette, il n'est pas nécessaire de définir la feuille de style.

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

non, ça ne marche pas .... merci quand même! – Lopoc

+0

essayer le nouveau code que je viens de poster merci – apt

4

Votre classe colorButton hérite de QWidget, mais vous appelez QPushButton.__init__() dans le constructeur. Peut-être que vous voulez hériter de QPushButton?

En utilisant la définition de classe suivante, votre code fonctionne pour moi:

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

J'ai corrigé avoir dans les deux cas l'objet QtGui.Qwidget, mais maintenant! il n'apparait toujours pas – Lopoc

+0

Je ne sais pas ce que vous faites, mais quand je lance votre code après avoir remplacé la définition 'colorButton', je vois le bouton marron. –

+0

Eh bien, cela fonctionne, mais je ne veux pas un QPushButton. J'utilise intentionnellement l'objet QWidget. – Lopoc

0

Je pense que vous devez donner à votre ColorDialog une mise en page en utilisant

self.setLayout(SOME_LAYOUT) 

puis ajoutez votre touche à la mise en page avec quelque chose comme

self.layout().addItem(button) 

Sinon, je ne suis pas sûr si simplement donner votre bouton le C olorDialog en tant que parent est suffisant pour l'affichage.

1

Vous devez donner au widget un 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_()