# -*- coding: utf-8 -*-
"""
基于Python实现导入Excle表数据显示、右键删除示例
"""
# -------------------------------------- 引入依赖模块 --------------------------------------------------------------------
import sys
from PyQt5.QtGui import QIcon, QCursor
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QAbstractItemView, QHeaderView, \
QTableWidgetItem, QMenu, QAction
from PyQt5 import QtCore
from excle import MainUi
import xlrd
import numpy as np
from PyQt5.QtCore import Qt
class MainCode(QMainWindow, MainUi.Ui_MainWindow): # MainUi为qt designer生成的主界面设计文件的.py文件
def __init__(self):
QMainWindow.__init__(self)
MainUi.Ui_MainWindow.__init__(self)
self.setupUi(self)
self.status = self.statusBar()
self.setWindowTitle('基于Python实现导入Excle表数据显示、右键删除示例')
self.setWindowIcon(QIcon('../images/tubiao.png')) # 设置窗体标题图标
self.tableWidget.customContextMenuRequested.connect(self.tableWidgetItem_Right) # 绑定右键事件
self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu) # 打开右键菜单的策略
self.pushButton_loadData.clicked.connect(self.load_excledata) # 导入数据按钮函数
def load_excledata(self):
global openFileurl, tables, scale, user, age, gongzi, tables_show, tablesl
tablesl = []
tables_show = []
tables = []
user = []
gongzi = []
age = []
openFileurl = QFileDialog.getOpenFileName(self, '请选择文件', '', '(*.xlsx)')
print("选取的Excle文件地址为:", openFileurl[0])
try:
# 导入需要读取的第一个Excel表格的路径
data1 = xlrd.open_workbook(str(openFileurl[0]))
table = data1.sheets()[0]
# 将excel表格内容导入到tables列表中
def import_excel(excel):
for i in range(3):
for rown in range(excel.nrows):
tables.append(int(table.cell_value(rown, i)))
print(tables)
import_excel(table)
def import_excel_table(excel):
for rown in range(excel.nrows):
for i in range(3):
global tablesl
tablesl.append(int(table.cell_value(rown, i)))
tables_show.append(tablesl)
tablesl = []
print("tables_show", tables_show)
import_excel_table(table)
if len(tables) % 3 is 0:
scale = int(len(tables) / 3)
for i in range(scale):
user.append((int(tables[i])))
for l in range(scale):
gongzi.append(int(tables[l + scale]))
for n in range(scale):
age.append(int(tables[n + scale * 2]))
md.alert("Excle数据已导入!")
else:
md.alert("Excle数据有误!")
except Exception as e:
md.alert("Excle数据导入有误!")
finally:
openFileurl = ''
md.showTable()
def showTable(self):
global tables_show, scale, tabless, tables0, ic
tabless = np.array(tables_show)
print(tabless)
row = scale
ic = scale+1
vol = 3
tables0 = tabless.tolist()
print("tables0", tables0)
self.tableWidget.setRowCount(row)
self.tableWidget.setColumnCount(vol)
self.tableWidget.setHorizontalHeaderLabels(["工号", "年龄", "工资"])
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setAlternatingRowColors(1)
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
for i in range(row):
for j in range(vol):
temp_data = tabless[i][j]
# 转换后可插入表格
data = QTableWidgetItem(str(temp_data))
self.tableWidget.setItem(i, j, data)
def tableWidgetItem_Right(self):
popMenu = QMenu()
delete = QAction(u'删除', self)
delete.triggered.connect(self.deleteRow) # 连接删除功能
popMenu.addAction(delete)
popMenu.exec_(QCursor.pos())
def deleteRow(self):
global tabless
selected_items = self.tableWidget.selectedItems()
row = self.tableWidget.currentRow() # 获取当前选中的行
print("当前选中的行:", row)
tabless = np.delete(tabless, row, axis=0)
if len(selected_items) == 0: # 没有选中任何行
return
selected_items = [selected_items[i] for i in range(len(selected_items) - 1, -1, -7)]
for items in selected_items:
self.tableWidget.removeRow(self.tableWidget.indexFromItem(items).row())
print(tabless)
def alert(self, message_alert):
self.box = QMessageBox(QMessageBox.Warning, "提示框", message_alert)
qyes = self.box.addButton(self.tr("确定"), QMessageBox.YesRole)
self.box.exec_()
# ---------------------------------------- 程序入口 -----------------------------------------------------------------
if __name__ == '__main__':
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) # Qt从5.6.0开始,支持High-DPI
app = QApplication(sys.argv)
md = MainCode()
md.show()
sys.exit(app.exec_())
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
pythongui.rar (14个子文件)
pythongui
excle
main.py 6KB
MainUi.ui 2KB
__pycache__
MainUi.cpython-37.pyc 2KB
data.xlsx 9KB
MainUi.py 2KB
__pycache__
resource.cpython-37.pyc 79KB
.idea
dbnavigator.xml 27KB
codeStyles
Project.xml 2KB
工厂监控系统v1.0(2020.1.16).iml 474B
misc.xml 450B
modules.xml 333B
encodings.xml 214B
workspace.xml 10KB
inspectionProfiles
profiles_settings.xml 228B
共 14 条
- 1
资源评论
- 哩哩啦啦噜噜2022-09-09资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
- qq_338115532022-10-26感谢大佬分享的资源,对我启发很大,给了我新的灵感。
- lizong1112222023-07-02资源和描述一致,质量不错,解决了我的问题,感谢资源主。
*猪耳朵*
- 粉丝: 5w+
- 资源: 56
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 单相桥式全控整流MATALB Simulink仿真文件
- Dolby Vision安装包(解决杜比视界版本高清片源颜色不正问题)
- Python实现的简单二叉堆(最小堆)示例
- 嵌入式基础学习资料0000
- content_1714465331721.xls
- HM3401-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Chainbase+Web3+APi+Data warehouse
- HM3401D-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- GEE案例-1990-2023年计算某个区域的NDVI时序变化轨迹(以徐州市为例)含全部代码.pdf
- HM3401C-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功