2

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

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

但我不知道如何为设计器中创建的小部件执行此操作。我需要它用于 QTabeleWidget。希望可以有人帮帮我。我试图在谷歌的帮助下解决这个问题,但没有成功。这个网站帮助了我很多次,所以我想我会试一试并询问。

4

1 回答 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')

对于上面的 (3),您最终会得到您为表单指定的任何基本类型的实例。然后,您可以根据需要覆盖您mousePressEvent的。

我建议您查看PyQt4 参考手册中的第 13.1 节。第 13.2 节讨论了该模块。uic

于 2010-08-21T22:30:05.243 回答