2010-01-04 2 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 не дает мне какие-либо ошибки, но «цветные» виджет не отображается. Зачем? thank

+0

класс ColorButton (QtGui.QWidget) отсутствует символ «:», но это дало бы SyntaxError ... – miku

+1

В Python, имена классов, как правило, начинаются с заглавной буквы. –

ответ

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

+0

попробуйте новый код, который я только что написал Спасибо – apt

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

Я исправил наличие в обоих случаях объекта QtGui.Qwidget, но теперь! он все еще не отображается – Lopoc

+0

Я не знаю, что вы делаете, но когда я запускаю ваш код после замены определения colorButton, я вижу коричневую кнопку. –

+0

Ну, это работает, но я не хочу QPushButton. Намеренно я использую QWidget oject. – Lopoc

0

Я думаю, что вам нужно, чтобы дать вашему ColorDialog макета с помощью

self.setLayout(SOME_LAYOUT) 

затем добавить кнопку в макет с что-то вроде

self.layout().addItem(button) 

В противном случае я не уверен, что просто дайте вашей кнопке C olorDialog в качестве родителя достаточно для отображения.

1

Необходимо нарисовать виджет 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_() 
Смежные вопросы