【问题标题】:How to implement MousePressEvent for a Qt-Designer Widget in PyQt如何在 PyQt 中为 Qt-Designer 小部件实现 MousePressEvent
【发布时间】:2010-08-21 21:38:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pyqt4 qt-designer


    【解决方案1】:

    使用 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 reference manual 中的section 13.1。 13.2 节讨论了uic 模块。

    【讨论】:

    • 感谢您的回答。我试过了,但它不起作用。如果我单击窗口而不是小部件,则会触发。 mousePressEvent 有效。但是,如果我单击 QTableWidget 或 QLabel,则不会执行 mousePressEvent。例如,如果我想要来自 QTableWidget 的 itemSelectionChanged 信号,那么我写:“def on_myTable_itemSelectionChanged(self):” 所以我正在寻找与 mousePressEvent 等效的东西。希望我的解释还不错。
    • 信号自动连接,但事件没有。当您子类化并实现mousePressEvent 时,您将收到给定小部件的事件,但仅限于子级不接受该事件的事件。由于您在小部件中有小部件,因此它们中的每一个都在父级看到它之前接收并处理事件。当没有相关信号存在时,一种处理该问题的好方法是使用installEventFilter 安装事件过滤器。
    • 谢谢!它适用于 installEventFilter。这就是我一直在寻找的。​​span>
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2019-01-30
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多