我正在用Python 3.5和PyQt5编写软件。当我重写QTableWidget的mousePressEvent时,cellClicked信号不再触发。我需要重写mousePressEvent来获得鼠标单击的位置,并需要cellClicked来为被单击的单元格做另一项工作。为什么会这样呢?问题出在哪里?这是我重写事件的代码:
class QTableWidget(QTableWidget):
def checking(self):
if (self.endgingposx - self.startingposx) >= 50:
self.clear()
def mousePressEvent(self,event):
event.accept()
self.startingposx = event.x()
def mouseReleaseEvent(self,event):
event.accept()
self.endgingposx = event.x()
self.checking()
这是我的点击信号,它是连接的插槽:
self.main_table.cellClicked.connect(self.populatescnte)
def populatescnte(self,row,column):
itemnum = self.scentence_listw.count()
exec("item{} = QListWidgetItem(QIcon('content/img/food.png'),'{}')".format(itemnum+1,self.main_table.cellWidget(row,column).text))
exec("self.scentence_listw.addItem(item{})".format(itemnum+1))
self.scentence_listw是一个QListWidget。先感谢您。
更新 谢谢大家,这段代码对我有用:
class myTableWidget(QTableWidget):
def checking(self):
if (self.endgingposx - self.startingposx) >= 50:
self.clear()
def mousePressEvent(self,event):
super().mousePressEvent(event)
self.startingposx = event.x()
def mouseReleaseEvent(self,event):
super().mouseReleaseEvent(event)
self.endgingposx = event.x()
self.checking()
该事件未传播,因为您已在处理程序中接受该事件。
您允许需要调用原始处理程序。
FWIW,您可以连接处理程序itemSelectionChanged
并selectedItems
在表上获取该值,而不用跟踪位置。
import sys
from PyQt5.QtWidgets import (
QApplication, QWidget, QTableWidget,
QTableWidgetItem, QGridLayout
)
class Widget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Simple')
table = TrackedTableWidget()
layout = QGridLayout()
layout.addWidget(table, 0, 0)
self.setLayout(layout)
self.show()
class TrackedTableWidget(QTableWidget):
def __init__(self, *args, **kwargs):
super().__init__()
self.initUI()
def initUI(self):
self.setRowCount(2)
self.setColumnCount(2)
self.setItem(0, 0, QTableWidgetItem('30', 0));
self.setItem(0, 1, QTableWidgetItem('40', 0));
self.setItem(1, 0, QTableWidgetItem('50', 0));
self.setItem(1, 1, QTableWidgetItem('60', 0));
self.cellClicked.connect(self._handle_cell_clicked)
self.itemSelectionChanged.connect(self._handle_item_selection)
def _handle_cell_clicked(self, row, column):
print('cell_clicked', row, column)
print('selected cell positions', self.startingposx, self.endingposx)
def _handle_item_selection(self, *args):
print(self.selectedItems())
print('item_selection', args)
def mousePressEvent(self, event):
print('mousePressEvent')
self.startingposx = event.x()
super().mousePressEvent(event)
def mouseReleaseEvent(self, event):
print('mouseReleaseEvent')
self.endingposx = event.x()
super().mouseReleaseEvent(event)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = Widget()
sys.exit(app.exec_())
这是@ Steve314所做的更改之后的吗?
我进行了更改,并说了发生了什么。
没有什么变化。有无超级方法,我测试是否有接受行,但没有任何变化。