如何在PyQt中为Qt-Designer小部件实现MousePressEvent

发布于 2021-01-29 16:38:07

我有一个小部件(QTabeleWidget,QLabels和一些QButton)。它是在Qt-
Designer中构建的,现在我必须实现一些东西。为此,我需要mousePressEvent。通常,我会写一个子类并编写如下内容:

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

但是我不知道如何对设计器中创建的小部件执行此操作。我需要QTabeleWidget。希望可以有人帮帮我。我试图在Google的帮助下解决问题,但没有成功。这个站点对我有很多帮助,所以我想我会试一试。

关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用PyQt,可以使用三种不同的方法来处理在Designer中创建的表单:

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

    单一继承

    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根据需要覆盖。

    建议您阅读PyQt4参考手册中的13.1节。第13.2节讨论模块。uic



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看