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

3 投票
1 回答
15115 浏览
提问于 2025-04-16 03:07

我有一个小部件(QTabeleWidget、QLabels 和一些 QButtons)。这个小部件是在 Qt-Designer 中制作的,现在我需要实现一些功能。为此,我需要使用 mousePressEvent(鼠标点击事件)。

通常情况下,我会写一个子类,然后写一些代码,比如这样:

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

但是我不知道如何为在 Designer 中创建的小部件做到这一点。我需要这个功能来处理 QTabeleWidget。希望有人能帮我。我尝试过用谷歌解决这个问题,但没有成功。这个网站以前帮助过我很多次,所以我想试试在这里问问。

1 个回答

4

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

  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')

对于上面提到的第三种方法,你会得到一个你为表单指定的基本类型的实例。然后你可以根据需要重写你的 mousePressEvent 方法。

我建议你查看一下 PyQt4参考手册的第13.1节。第13.2节讲的是 uic 模块。

撰写回答