如何在PyQ中实现Qt设计器小部件的MousePressEvent

2024-10-01 00:32:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小部件(QTabeleWidget、QLabels和一些qbutton)。它是在Qt设计器中构建的,现在我必须实现一些东西。为此我需要一个防鼠器。 通常我会写一个子类,然后写这样的东西:

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

但我不知道如何在设计器中创建小部件。 我需要它给QTabeleWidget。希望有人能帮助我。我试图在谷歌的帮助下解决这个问题,但没有成功。 这个网站帮了我很多次忙,所以我想我会试一试的。


Tags: selfeventif部件defbuttonqt子类
1条回答
网友
1楼 · 发布于 2024-10-01 00:32:17

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

相关问题 更多 >