У меня в приложении несколько QTableWidget:
Окно моего приложения
Я хочу иметь возможность копировать текст, хранящийся в ячейке, при выборе, нажав ctrl + c или щелкнув правой кнопкой мыши и выбрав меню «Копировать».
Таблицы, которые я использую, согласованы, и это код, который реализует em:
class AlphaPiQTableWidget(QTableWidget):
def __init__(self, attr_dict):
super(AlphaPiQTableWidget, self).__init__()
values = list(attr_dict.values())
attributes = list(attr_dict.keys())
# Tabella che mostra i valori del competitor
self.setRowCount(len(attributes))
self.setColumnCount(2)
self.setCellWidget(0,0, QLabel(attributes[0]))
self.setCellWidget(1,0, QLabel(attributes[1]))
self.setCellWidget(2,0, QLabel(attributes[2]))
self.setCellWidget(3,0, QLabel(attributes[3]))
self.setCellWidget(0,1, QLabel(str(values[0])))
self.setCellWidget(1,1, QLabel(str(values[1])))
self.setCellWidget(2,1, QLabel(str(values[2])))
self.setCellWidget(3,1, QLabel(str(values[3])))
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.showTableMenu)
# Fai occupare tutto lo spazio libero nel layout alla tabella
h_header = self.horizontalHeader()
h_header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
h_header.setVisible(False)
v_header = self.verticalHeader()
v_header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
v_header.setVisible(False)
# Fai in modo che la tabella sia sempre visualizzata per intero
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
def showTableMenu(self, pos):
# get the text of the index at the mouse cursor (if any)
text = self.indexAt(pos).data()
menu = QtWidgets.QMenu()
copyAction = menu.addAction('Copy')
if not text:
copyAction.setEnabled(False)
# show the menu
res = menu.exec_(QtGui.QCursor.pos())
if res == copyAction:
# if the menu has been triggered by the action, copy to the clipboard
QtWidgets.QApplication.clipboard().setText(text)
Проблема в том, что когда я копирую текст, щелкая правой кнопкой мыши по ячейке и нажимая «копировать» 'self.indexAt(pos).data()
всегда возвращает None
. Почему?
PS все AlphaPiQTableWidget
хранятся в QHBoxLayout вместе с другими виджетами (такими как ярлыки и кнопки, как вы можете видеть.