2013-10-13 232 views
0

Maigcally我不能使用的PyQt 4從QWidget中繼承:如何在PyQt中繼承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) 
+0

如何你的意思是不行嗎?有錯誤嗎?窗口不出現?你需要更具描述性。 – 2013-10-14 00:39:25

+0

窗口小部件不會出現在窗口內部。 – cdonts

+0

你可以附上區別截圖嗎?根據你的代碼,儘管你聲明瞭DnDWidget的父類,但你實際上並不把它放在窗口中,所以我希望它不會顯示出來。 – 2013-10-14 01:16:19

回答

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」被印在終端

+0

當使用此代碼時,將樣式表更改爲任何顏色deosnt工作 – user1767754