Python 如何在PyQt中为Qt设计器小部件实现MousePressEvent
我有一个小部件(QTabeleWidget、QLabels和一些qbutton)。它是在Qt设计器中构建的,现在我必须实现一些东西。为此,我需要鼠标垫。 通常我会编写一个子类并编写如下内容:Python 如何在PyQt中为Qt设计器小部件实现MousePressEvent,python,pyqt4,qt-designer,Python,Pyqt4,Qt Designer,我有一个小部件(QTabeleWidget、QLabels和一些qbutton)。它是在Qt设计器中构建的,现在我必须实现一些东西。为此,我需要鼠标垫。 通常我会编写一个子类并编写如下内容: def mousePressEvent(self, event): if event.button() == Qt.LeftButton: print "left" else: print 'right' 但是我不知道如何在设计器中创建小部件。 我需要它来开
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
print "left"
else:
print 'right'
但是我不知道如何在设计器中创建小部件。
我需要它来开QTabeleWidget。希望有人能帮助我。我试图在谷歌的帮助下解决这个问题,但没有成功。
这个网站帮助了我很多次,所以我想我会尝试一下,然后问一下 使用PyQt,有三种不同的方式来处理在designer中创建的表单:
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')
多重继承:
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')
动态生成的:
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
我建议你看一看电视。第13.2节讨论了
uic
模块。谢谢您的回答。我试过了,但没用。如果我点击窗口,而不是小部件,它就会触发。鼠标压力器工作正常。但是如果我点击QTableWidget或QLabel,mousePressEvent不会被执行。例如,如果我想从QTableWidget获得itemSelectionChanged信号,那么我会写:“def on_myTable_itemSelectionChanged(self):”因此我正在为mousePressEvent寻找等效的东西。希望我的解释不坏。自动接线存在于信号中,但不适用于事件。当您子类化并实现mousePressEvent
时,您将接收给定小部件的事件,但仅接收子部件不接受事件的事件。由于小部件中有小部件,因此每个小部件都会在父部件看到事件之前接收和处理事件。当不存在相关信号时,一个很好的处理方法是使用installEventFilter
安装事件过滤器。谢谢!它与installEventFilter一起工作。这就是我要找的。