2013-10-13 5 views
0

Maigcally Я не могу наследовать от QWidget с использованием PyQt 4:Как наследовать от QWidget в PyQt?

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

Как вы имеете в виду, что это не работает? Есть ли ошибка? Не отображается ли окно? Вы должны быть немного более наглядными. –

+0

Виджет не отображается внутри окна. – cdonts

+0

Можете ли вы приложить скриншот разницы? Основываясь на вашем коде, хотя вы объявляете родителя DnDWidget, вы фактически не размещаете его внутри окна, поэтому я ожидаю, что он не появится. –

ответ

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 пикселей площади, вы увидите букву «а», которое печатается в терминале

+0

При использовании этого кода изменение таблицы стилей на любой цвет deosnt work – user1767754

Смежные вопросы