pyqt4 mousePressEvent не вызывается (нет виджета?) - PullRequest
0 голосов
/ 18 января 2012

Я только что написал небольшой пример, и мне не удалось его запустить.

from PyQt4 import QtGui, QtCore
import sys

class Drawer(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Drawer, self).__init__(parent)
        self.setStyleSheet("QWidget { background-color: %s }" % QtGui.QColor(99, 0, 0).name())

    def mousePressEvent(self, event):
        print 'mouse pressed'
        self.update();

class MyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.drawer = Drawer(self)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    myapp = MyApp()
    myapp.show()
    sys.exit(app.exec_())     

Виджет не отображается (без цвета, окно серое), и если я нажимаю мышь, нетprint ..

где моя ошибка?

решено : как qiao просто укажите меня в комментарии, моя ошибка - способ добавитьвиджет в виде сцены графа qt4.я думал, что должен позвонить родителю в init и все.Это не так хорошо, я должен добавить QLayout и добавить в него дочерние элементы (это совершенно очевидно: метод addWidget написан только в QLayout, а не в QWidget и имеет систему сценографов без возможностидобавление нового ребенка довольно странно)

1 Ответ

2 голосов
/ 18 января 2012

Вы должны установить центральный виджет главного окна в качестве ящика. В противном случае ящик не будет прикреплен к главному окну.

class MyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.drawer = Drawer(self)
        self.setCentralWidget(self.drawer)

После исправления выше вы увидите, что событие нажатия мыши работает правильно.

Что касается цвета, установка таблицы стилей в QMainWindow - это хорошо, поэтому настройка Drawer - это другой виджет (например, QLineEdit). Я не знаю, в чем здесь дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...