【发布时间】:2018-11-13 20:01:53
【问题描述】:
我目前有一个带有不同单元格的 QTableWidget。当我左键单击一个单元格时,我希望其上的数字加 1,如果我右键单击,我希望其上的数字减 1。
第一部分我用没问题
self.(widget_name).cellClicked.connect(self.addone)
问题在于右键单击。有内置的方法吗?我怎样才能实现它?我尝试从 QTableWidgets 创建自己的 Table 类并覆盖 mousePressEvent 但没有用(单击单元格没有做任何事情,它甚至没有选择单元格)。还尝试了 eventFilter 并没有。有关我在这两种情况下使用的确切代码,请参见下文。
对于 mousePressEvent:
class Table(QtWidgets.QTableWidget):
def __init__(self,parent=None):
QtWidgets.QTableWidget.__init__(self,parent)
def mousePressEvent(self,QMouseEvent):
if QMouseEvent.button() == QtCore.LeftButton:
print('left') #FOR DEBUGGING
row = self.currentRow()
column = self.currentColumn()
new_text = round(float(self.item(row,column).text()) + 1,2)
self.item(row,column).setText(str(new_text))
elif event.button() == QtCore.RightButton:
print('right') #FOR DEBUGGING
row = self.currentRow()
column = self.currentColumn()
new_text = round(float(self.item(row,column).text()) - 1,2)
self.item(row,column).setText(str(new_text))
对于事件过滤器:
class Table(QtWidgets.QTableWidget):
def __init__(self,parent=None):
QtWidgets.QTableWidget.__init__(self,parent)
self.installEventFilter(self)
def eventFilter(self,QObject,event):
if event.type() == QtCore.QEvent.MouseButtonPress:
if event.button() == QtCore.LeftButton:
print('left') #FOR DEBUGGING
row = self.currentRow()
column = self.currentColumn()
new_text = round(float(self.item(row,column).text()) + 1,2)
self.item(row,column).setText(str(new_text))
elif event.button() == QtCore.RightButton:
print('right') #FOR DEBUGGING
row = self.currentRow()
column = self.currentColumn()
new_text = round(float(self.item(row,column).text()) - 1,2)
self.item(row,column).setText(str(new_text))
对于两者(创建表)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
self.centralwidget = QtWidgets.QWidget(self)
....
self.parameters = Table(self.centralwidget)
...
...
调试文本(打印“左”或“右”)也不会出现在控制台中。
【问题讨论】:
标签: python pyqt pyqt5 qtablewidget