1

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_()

うまくいきません。ウィジェットしか見えません。ただし、QWidget の代わりに QLabel を使用すると機能します。

ありがとう。

解決

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)  
4

1 に答える 1

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」が出力されます。

于 2013-10-16T05:28:29.630 に答える