我正在使用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()
答案 0 :(得分:0)
事件未被传播,因为您已在处理程序中接受该事件。
您需要调用原始处理程序。
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_())
答案 1 :(得分:0)
我按如下方式处理事件:
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__() # Call the inherited classes __init__ method
uic.loadUi('./mainwindow.ui', self) # Load the .ui file
self.myButton.pressed.connect(self.mousePress)
self.show() # Show the GUI
def mousePress(self):
print("Mouse pressed")