如何在PyQt中继承QWidget?

时间:2013-10-13 23:17:10

标签: python-2.7 pyqt qwidget

Maigcally我无法使用PyQt 4继承QWidget:

from PyQt4.QtGui import QApplication, QMainWindow, QWidget

class MyWidget(QWidget):
    pass

if __name__ == "__main__":
    app = QApplication([])
    window = QMainWindow()
    window.resize(200, 200)
    widget1 = MyWidget(window)
    widget1.resize(100, 100)
    widget1.setStyleSheet("background-color:#FFFFFF")
    window.show()
    app.exec_()

它不起作用。我只是看不到小部件。但是,使用QLabel而不是QWidget可以工作。

感谢。

的解决方案

重新实现paintEvent:

class MyWidget(QWidget):
    def paintEvent(self, event):
        o = QStyleOption()
        o.initFrom(self)
        p = QPainter(self)
        self.style().drawPrimitive(QStyle.PE_Widget, o, p, self)  

1 个答案:

答案 0 :(得分:0)

您正确地进行了子类化。 “问题”只是QWidget与主窗口具有相同的背景颜色(您对setStyleSheet的调用不起作用)。

作为证据,从终端运行此代码:

from PyQt4.QtGui import QApplication, QMainWindow, QWidget, QLabel

class MyWidget(QWidget):
     def enterEvent(self, evt):
        print 'a'

if __name__ == "__main__":
    app = QApplication([])
    window = QMainWindow()
    window.resize(200, 200)
    widget1 = MyWidget(window)
    widget1.resize(100, 100)
    widget1.setStyleSheet("background-color:#FFFFFF")
    window.show()
    app.exec_()

当您将鼠标移动到第一个100,100像素的正方形时,您会在终端中看到字母'a'