PyQT5 实现快捷键复制表格数据的方法示例


Posted in Python onJune 19, 2020

本文主要介绍了PyQT5 实现快捷键复制表格数据的方法示例,分享给大家,具体如下:

表格数据如下:

PyQT5 实现快捷键复制表格数据的方法示例

# -*- coding:utf-8 -*-

import pyperclip
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtWidgets


# 复制选择表格数据
def selected_tb_text(table_view):
  try:
    indexes = table_view.selectedIndexes() # 获取表格对象中被选中的数据索引列表
    indexes_dict = {}
    for index in indexes: # 遍历每个单元格
      row, column = index.row(), index.column() # 获取单元格的行号,列号
      if row in indexes_dict.keys():
        indexes_dict[row].append(column)
      else:
        indexes_dict[row] = [column]

    # 将数据表数据用制表符(\t)和换行符(\n)连接,使其可以复制到excel文件中
    text = ''
    for row, columns in indexes_dict.items():
      row_data = ''
      for column in columns:
        data = table_view.model().item(row, column).text()
        if row_data:
          row_data = row_data + '\t' + data
        else:
          row_data = data

      if text:
        text = text + '\n' + row_data
      else:
        text = row_data
    return text
  except BaseException as e:
    print(e)
    return ''


class Ui_Form(object): # UI类
  def setupUi(self, Form):
    Form.setObjectName("Form")
    self.tableView = QtWidgets.QTableView(Form)
    self.tableView.setEnabled(True)
    self.tableView.setGeometry(QtCore.QRect(5, 5, 400, 200))
    self.tableView.setObjectName("tableView")
    QtCore.QMetaObject.connectSlotsByName(Form)


# 逻辑类
class StartRun(QWidget, Ui_Form):
  def __init__(self):
    super().__init__()
    self.init_ui() # 实例化窗体
    self.show()

  def init_ui(self):
    self.setupUi(self) # 实例化控件
    self.update_table_view()

  def update_table_view(self):
    data = [
      (1, '张三', 18),
      (2, '李四', 29),
      (3, '王五', 25),
      (4, '赵六', 26),
    ]
    columns = ['id', 'name', 'age']
    model = QStandardItemModel(len(data), len(columns)) # 设置数据层次结构,rows行cols列
    model.setHorizontalHeaderLabels([str(i) for i in columns]) # 设置列名
    for row in range(len(data)):
      for column in range(len(data[row])):
        item = QStandardItem(str(data[row][column]))
        model.setItem(row, column, item) # 设置每个位置的文本值
    self.tableView.setModel(model) # 实例化表格视图,设置模型为自定义的模型

  def keyPressEvent(self, event):   # 重写键盘监听事件
    # 监听 CTRL+C 组合键,实现复制数据到粘贴板
    if (event.key() == Qt.Key_C) and QApplication.keyboardModifiers() == Qt.ControlModifier:
      text = selected_tb_text(self.tableView) # 获取当前表格选中的数据
      if text:
        pyperclip.copy(text) # 复制数据到粘贴板


if __name__ == '__main__':
  import sys
  app = QApplication(sys.argv)
  S = StartRun()
  sys.exit(app.exec_())

 到此这篇关于PyQT5 实现快捷键复制表格数据的方法示例的文章就介绍到这了,更多相关PyQT5 快捷键复制表格数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
python实现比较文件内容异同
Jun 22 Python
一文了解Python并发编程的工程实现方法
May 31 Python
python django 原生sql 获取数据的例子
Aug 14 Python
django重新生成数据库中的某张表方法
Aug 28 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
python基础之//、/与%的区别详解
Jun 10 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 #Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 #Python
Python实现爬取并分析电商评论
Jun 19 #Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 #Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 #Python
Keras设置以及获取权重的实现
Jun 19 #Python
Python包和模块的分发详细介绍
Jun 19 #Python
You might like
一个分页的论坛
2006/10/09 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python创建临时文件夹的方法
2015/07/06 Python
Python中装饰器高级用法详解
2017/12/25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
心得体会范文
2014/01/04 职场文书
合伙经营协议书
2014/04/18 职场文书
关于读书的活动方案
2014/08/14 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
二手房购房协议书范本
2014/10/05 职场文书
村干部任职承诺书
2015/01/21 职场文书
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL