Как реализовать MousePressEvent для виджета Qt-Designer в PyQt - PullRequest
2 голосов
/ 22 августа 2010

У меня есть виджет (QTabeleWidget, QLabels и некоторые QButton).Он был собран в Qt-Designer.И теперь я должен реализовать некоторые вещи.Для этого мне нужно mousePressEvent.Обычно я писал бы подкласс и писал что-то вроде этого:

    def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        print "left"
    else:
        print 'right'

Но я не знаю, как это сделать для виджета, созданного в Designer.Мне это нужно для QTabeleWidget.Надеюсь, кто-нибудь может мне помочь.Я пытался решить проблему с помощью Google, но безуспешно.Этот сайт мне помогал много раз, поэтому я решил попробовать

1 Ответ

3 голосов
/ 22 августа 2010

В PyQt есть три различных способа работы с формами, созданными в конструкторе:

  1. Использование одиночного наследования и превращение формы в переменную-член
  2. Использование множественного наследования
  3. Динамически генерировать элементы непосредственно из файла пользовательского интерфейса

Одиночное наследование :

class MyTableWidget(QTableWidget):
    def __init__(self, parent, *args):
        super(MyTableWidget, self).__init__(parent, args)
        self.ui = YourFormName()
        self.ui.setupUi(self)
        # all gui elements are now accessed through self.ui
    def mousePressEvent(self, event):
        pass # do something useful

Множественное наследование :

class MyTableWidget(QTableWidget, YourFormName):
    def __init__(self, parent, *args):
        super(MyTableWidget, self).__init__(parent, args)
        self.setupUi(self)
        # self now has all members you defined in the form
    def mousePressEvent(self, event):
        pass # do something useful

Динамически генерируемый :

from PyQt4 import uic
yourFormTypeInstance = uic.loadUi('/path/to/your/file.ui')

Для (3) выше вы получите экземпляр любого базового типа, который вы указали для своей формы.Затем вы можете переопределить ваш mousePressEvent по своему желанию.

Я бы порекомендовал вам взглянуть на раздел 13.1 в справочном руководстве PyQt4 .В разделе 13.2 рассказывается о модуле uic.

...