【发布时间】:2020-09-21 13:03:51
【问题描述】:
我创建了一个QTableWidget 使用PyQt5 和openpyxl 在VSCode 中加载excel,我无法分别捕捉/获取鼠标左键和右键。左键单击将单元格内容复制到剪贴板,右键单击单元格以粘贴剪贴板中的内容。
基本上,左键单击复制单元格-> 保存到剪贴板-> 右键单击粘贴到单元格。
App的分步流程:
1 - 左键单击这些单元格中的任何一个将复制内容
2 - 复制的内容将保存/粘贴到剪贴板区域 (QLineEdit/QLabel)
3 - 右键单击任何这些单元格将粘贴剪贴板中的内容
4 - 以矩形显示 QTableWidget 的区域
这些是我尝试过但不起作用的一些代码:
# def tablewidget_clicked(self):
# self.mclick = self.tableWidget.mousePressEvent
# print(str(self.mclick))
# self.leftclick = QtCore.Qt.LeftButton
# print(str(self.leftclick)) # Displays 1
# self.rightclick = QtCore.Qt.RightButton
# print(str(self.rightclick)) # Displays 2
# self.midclick = QtCore.Qt.MiddleButton
# print(str(self.midclick)) # Displays
# if QtGui.QMouseEvent.button(QtCore.Qt.MouseButton): #== QtCore.Qt.LeftButton:
# print('hello')
# else:
# print('hi')
def eventFilter(self, source, event):
if event.type() == QtGui.QMouseEvent.MouseButtonPress:
if event.button() == QtCore.Qt.LeftButton:
print('hello')
return True
else:
return False
即使为self.tableWidget 创建视口也不起作用。
self.tablevport = self.tableWidget.viewport()
self.tablevport.installEventFilter(self)
self.tablevport.mousePressEvent()
到目前为止,这些代码下面可以工作(作为测试),但同时读取左键和右键。
self.tableWidget.cellClicked.connect(self.tablewidget_clicked)
def tablewidget_click(self):
if QtCore.Qt.LeftButton:
print('hello')
if QtCore.Qt.RightButton:
print('hi')
如果我能在这个应用程序中获得一个代码模式来实现我的目标,那将对我有很大帮助。我没有通过谷歌和 youtube 搜索。
最后,我相信或者至少我认为我在这里有很多缺陷,比如编码风格,将 QTableWidget 与其他类分开,很长的代码,也许我可以从其他 .py 文件中导入。但我仍在学习并以某种方式一点一点地改进。我确实希望我的问题的这个介绍可以很容易理解。
【问题讨论】:
-
请不要将代码添加为图片。
-
我认为如果我包含这些不起作用的代码,可能会引起一些人的困惑。但我可以编辑它。
-
请提供minimal, reproducible example,可能与您对事件过滤器所做的测试有关。
标签: python pyqt5 openpyxl qtablewidget