使用QT 写个qtableWidget 选择某片区域右键复制的程序
时间: 2024-03-09 11:49:11 浏览: 59
Qtableview的快捷键选择复制
好的,这里提供一个简单的示例程序,演示如何使用QTableWidget实现右键菜单复制功能:
```python
from PyQt5.QtWidgets import QApplication, QMenu, QTableWidget, QTableWidgetItem, QAction, QHeaderView
from PyQt5.QtGui import QClipboard
from PyQt5.QtCore import Qt
class MyTable(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setColumnCount(3)
self.setRowCount(3)
self.setHorizontalHeaderLabels(['姓名', '性别', '年龄'])
self.setVerticalHeaderLabels(['1', '2', '3'])
self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
for i in range(3):
for j in range(3):
item = QTableWidgetItem('{}'.format(i+j))
self.setItem(i, j, item)
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.showMenu)
def showMenu(self, pos):
menu = QMenu(self)
copyAction = QAction('复制', self)
copyAction.triggered.connect(self.copy)
menu.addAction(copyAction)
menu.exec_(self.mapToGlobal(pos))
def copy(self):
indexes = self.selectedIndexes()
if indexes:
clipboard = QClipboard()
text = '\t'.join([str(self.item(index.row(), index.column()).text()) for index in indexes])
clipboard.setText(text)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
table = MyTable()
table.show()
sys.exit(app.exec_())
```
在这个示例程序中,我们创建了一个QTableWidget并添加了一些数据。然后,我们通过设置`setContextMenuPolicy`方法为`Qt.CustomContextMenu`来启用右键菜单,并通过`customContextMenuRequested`信号连接到`showMenu`槽函数。在`showMenu`槽函数中,我们创建了一个QMenu,并添加了一个QAction来触发复制事件。当用户选择了需要复制的单元格后,我们将所有选中的单元格的文本拼接成一个字符串,然后将其复制到系统剪贴板中。
需要注意的是,这个示例程序只是一个简单的示例,实际应用中可能需要根据具体需求进行修改。
阅读全文