如何在PyQt中为Qt-Designer Widget实现MousePressEvent

时间:2010-08-21 21:38:04

标签: pyqt4 qt-designer

我有一个Widget(QTabeleWidget,QLabels和一些QButtons)。它是在Qt-Designer中构建的。现在我必须实施一些事情。为此,我需要mousePressEvent。 通常我会编写一个子类并写下这样的东西:

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

但是我不知道如何为在Designer中创建的Widget做到这一点。 我需要它用于QTabeleWidget。希望可以有人帮帮我。我试图在谷歌的帮助下解决问题,但没有成功。 这个网站帮我多次,所以我想我会试一试并问。

1 个答案:

答案 0 :(得分:3)

使用PyQt,有三种不同的方法可以处理在设计器中创建的表单:

  1. 使用单一继承并使表单成为成员变量
  2. 使用多重继承
  3. 直接从UI文件动态生成成员
  4. 单一继承

    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

    我建议您查看section 13.1中的PyQt4 reference manual。第13.2节讨论了uic模块。