gpt4 book ai didi

python - PyQt5 QTableWidget : select column with right click, 并在上下文菜单中显示删除条目

转载 作者:行者123 更新时间:2023-12-01 01:11:43 24 4
gpt4 key购买 nike

我想通过右键单击选择一列,然后上下文菜单必须提供删除条目以删除所选列。

通过传输 QPoint arg,鼠标位置被发送到插槽。但我需要点击的列。

如何解决?

最佳答案

要获取列,您必须使用通过 itemAt() 方法获取的按下项目。

使用 setRangeSelected 方法通过传递 QTableWidgetSelectionRange 来选择它,该方法将列作为数据。

然后创建 QMenu 和 exec_() 方法,传递信号的位置,但必须使用视口(viewport)中的 mapToGlobal 将其转换为全局。

然后使用removeColumn()方法删除该列。

from PyQt5 import QtCore, QtGui, QtWidgets

class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)

self.table_widget = QtWidgets.QTableWidget(20, 10)

for i in range(self.table_widget.rowCount()):
for j in range(self.table_widget.columnCount()):
it = QtWidgets.QTableWidgetItem("{}-{}".format(i, j))
self.table_widget.setItem(i, j, it)

vlay = QtWidgets.QVBoxLayout(self)
vlay.addWidget(self.table_widget)

self.table_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.table_widget.customContextMenuRequested.connect(self.on_customContextMenuRequested)

@QtCore.pyqtSlot(QtCore.QPoint)
def on_customContextMenuRequested(self, pos):
it = self.table_widget.itemAt(pos)
if it is None: return
c = it.column()
item_range = QtWidgets.QTableWidgetSelectionRange(0, c, self.table_widget.rowCount()-1 , c)
self.table_widget.setRangeSelected(item_range, True)

menu = QtWidgets.QMenu()
delete_column_action = menu.addAction("Delete column")
action = menu.exec_(self.table_widget.viewport().mapToGlobal(pos))
if action == delete_column_action:
self.table_widget.removeColumn(c)

if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())

关于python - PyQt5 QTableWidget : select column with right click, 并在上下文菜单中显示删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54800768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com