PyQt4 - виджет не отображается - PullRequest
2 голосов
/ 04 января 2010

Я сделал эту программу на 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_()

intrpreter не выдаёт мне никакой ошибки, но «цветной» виджет не отображается. Зачем? спасибо

Ответы [ 4 ]

4 голосов
/ 04 января 2010

Ваш класс 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())
2 голосов
/ 05 января 2010

Вам нужно дать виджету 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_()
0 голосов
/ 04 января 2010

Я думаю, что вам нужно задать ColorDialog макет, используя

self.setLayout(SOME_LAYOUT)

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

self.layout().addItem(button)

В противном случае я не уверен, достаточно ли для отображения кнопки просто выбрать ColorDialog в качестве родительского.

0 голосов
/ 04 января 2010

Попробуйте установить для 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())
...