2013-10-13 193 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