赞
踩
untitled.py
- # -*- coding: utf-8 -*-
-
- # Form implementation generated from reading ui file 'untitled.ui'
- #
- # Created by: PyQt5 UI code generator 5.15.9
- #
- # WARNING: Any manual changes made to this file will be lost when pyuic5 is
- # run again. Do not edit this file unless you know what you are doing.
-
-
- from PyQt5 import QtCore, QtGui, QtWidgets
-
-
- class Ui_Form(object):
- def setupUi(self, Form):
- Form.setObjectName("Form")
- Form.resize(640, 480)
- self.verticalLayout_3 = QtWidgets.QVBoxLayout(Form)
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.pushButton_excel = QtWidgets.QPushButton(Form)
- self.pushButton_excel.setObjectName("pushButton_excel")
- self.horizontalLayout_2.addWidget(self.pushButton_excel)
- self.pushButton_csv = QtWidgets.QPushButton(Form)
- self.pushButton_csv.setObjectName("pushButton_csv")
- self.horizontalLayout_2.addWidget(self.pushButton_csv)
- self.verticalLayout_3.addLayout(self.horizontalLayout_2)
- self.horizontalLayout = QtWidgets.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.verticalLayout_2 = QtWidgets.QVBoxLayout()
- self.verticalLayout_2.setObjectName("verticalLayout_2")
- self.tableWidget = QtWidgets.QTableWidget(Form)
- self.tableWidget.setObjectName("tableWidget")
- self.tableWidget.setColumnCount(0)
- self.tableWidget.setRowCount(0)
- self.verticalLayout_2.addWidget(self.tableWidget)
- self.pushButton_tW2df = QtWidgets.QPushButton(Form)
- self.pushButton_tW2df.setObjectName("pushButton_tW2df")
- self.verticalLayout_2.addWidget(self.pushButton_tW2df)
- self.horizontalLayout.addLayout(self.verticalLayout_2)
- self.verticalLayout = QtWidgets.QVBoxLayout()
- self.verticalLayout.setObjectName("verticalLayout")
- self.listWidget = QtWidgets.QListWidget(Form)
- self.listWidget.setObjectName("listWidget")
- self.verticalLayout.addWidget(self.listWidget)
- self.pushButton_addLW = QtWidgets.QPushButton(Form)
- self.pushButton_addLW.setObjectName("pushButton_addLW")
- self.verticalLayout.addWidget(self.pushButton_addLW)
- self.pushButton_fL = QtWidgets.QPushButton(Form)
- self.pushButton_fL.setObjectName("pushButton_fL")
- self.verticalLayout.addWidget(self.pushButton_fL)
- self.pushButton_fD = QtWidgets.QPushButton(Form)
- self.pushButton_fD.setObjectName("pushButton_fD")
- self.verticalLayout.addWidget(self.pushButton_fD)
- self.horizontalLayout.addLayout(self.verticalLayout)
- self.horizontalLayout.setStretch(0, 3)
- self.horizontalLayout.setStretch(1, 1)
- self.verticalLayout_3.addLayout(self.horizontalLayout)
-
- self.retranslateUi(Form)
- QtCore.QMetaObject.connectSlotsByName(Form)
-
- def retranslateUi(self, Form):
- _translate = QtCore.QCoreApplication.translate
- Form.setWindowTitle(_translate("Form", "Form"))
- self.pushButton_excel.setText(_translate("Form", "打开Excel"))
- self.pushButton_csv.setText(_translate("Form", "打开CSV"))
- self.pushButton_tW2df.setText(_translate("Form", "tableWidget转换为dataframe"))
- self.pushButton_addLW.setText(_translate("Form", "listWidget添加选项"))
- self.pushButton_fL.setText(_translate("Form", "for循环列表推导式--list"))
- self.pushButton_fD.setText(_translate("Form", "for循环列表推导式--dict"))

主代码:
- import sys
- import pandas as pd
-
- from PyQt5.QtWidgets import *
-
- from untitled import Ui_Form
-
-
- class MyMainWindow(QWidget, Ui_Form): # 继承 QWidget类和 Ui_Form界面类
-
- def __init__(self, parent=None):
- super(MyMainWindow, self).__init__(parent) # 初始化父类
- self.setupUi(self) # 继承 Ui_Form 界面类
-
- # 设置选择模式为多选模式
- # self.listWidget.setSelectionMode(QListWidget.ExtendedSelection)
- self.listWidget.setSelectionMode(QAbstractItemView.MultiSelection)
-
- # ********** 打开Excel
- self.pushButton_excel.clicked.connect(self.openExcel)
- self.pushButton_excel.clicked.connect(self.creatExcelTable)
-
- # ********** 打开CSV
- self.pushButton_csv.clicked.connect(self.openCSV)
- self.pushButton_csv.clicked.connect(self.creatCsvTable)
-
- # ********** 将tableWidget转换为dataframe
- self.pushButton_tW2df.clicked.connect(self.tW2df)
-
- # ********** 设置up_listWidget选项
- self.pushButton_addLW.clicked.connect(self.addlistWidgetItem)
-
- # ********** for循环列表推导式--list
- self.pushButton_fL.clicked.connect(self.forLoopListDerivationFormula_list)
-
- # ********** for循环列表推导式--dict
- self.pushButton_fD.clicked.connect(self.forLoopListDerivationFormula_dict)
-
- # 打开Excel
- def openExcel(self):
- openXlsName = QFileDialog.getOpenFileName(self, '选择Excel文件', '',
- 'Excel files(*.xlsx , *.xls)')
-
- global excelPath
-
- excelPath = openXlsName[0]
- # print("Excel路径:", excelPath)
-
- def creatExcelTable(self):
- # print("Excel路径:", excelPath)
- try:
- # 读取Excel,将内容转写进表格
- inputTable = pd.read_excel(excelPath)
- # print(inputTable)
-
- # 设置表格行数与列数
- inputTableRows = inputTable.shape[0]
- inputTableColunms = inputTable.shape[1]
- # print(inputTableRows)
- # print(inputTableColunms)
- self.tableWidget.setRowCount(inputTableRows)
- self.tableWidget.setColumnCount(inputTableColunms)
-
- # 表头设置
- inputTableHeader = inputTable.columns.values.tolist()
- # print(inputTableHeader)
- self.tableWidget.setHorizontalHeaderLabels(inputTableHeader)
-
- for i in range(inputTableRows):
- for j in range(inputTableColunms):
- self.tableWidget.setItem(i, j, QTableWidgetItem(str(inputTable.iloc[i, j])))
-
- # 设置表格不可编辑
- self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
-
- except Exception as e:
- QMessageBox.critical(self, "错误", f"读取Excel文件时出错。\n{e}")
-
- # 打开CSV
- def openCSV(self):
- openCsvName = QFileDialog.getOpenFileName(self, '选择CSV文件', '',
- 'CSV files(*.csv)')
-
- global csvPath
-
- csvPath = openCsvName[0]
- # print("Csv路径:", csvPath)
-
- def creatCsvTable(self):
- # print("Csv路径:", csvPath)
- try:
- # 读取CSV,将内容转写进表格
- inputTable = pd.read_csv(csvPath)
- # print(inputTable)
-
- # 设置表格行数与列数
- inputTableRows = inputTable.shape[0]
- inputTableColunms = inputTable.shape[1]
- # print(inputTableRows)
- # print(inputTableColunms)
- self.tableWidget.setRowCount(inputTableRows)
- self.tableWidget.setColumnCount(inputTableColunms)
-
- # 表头设置
- inputTableHeader = inputTable.columns.values.tolist()
- # print(inputTableHeader)
- self.tableWidget.setHorizontalHeaderLabels(inputTableHeader)
-
- for i in range(inputTableRows):
- for j in range(inputTableColunms):
- self.tableWidget.setItem(i, j, QTableWidgetItem(str(inputTable.iloc[i, j])))
-
- # 设置表格不可编辑
- self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
-
- except Exception as e:
- QMessageBox.critical(self, "错误", f"读取CSV文件时出错。\n{e}")
-
- def addlistWidgetItem(self):
- # 清空选项框(必需)
- self.listWidget.clear()
-
- # 返回主窗口表格列数
- numberCol = self.tableWidget.columnCount()
- # print(numberCol)
- listWidgeDt = []
- # 获取表格表头内容
- for c in range(numberCol):
- headerItem = self.tableWidget.horizontalHeaderItem(c)
- # print(headerItem)
- if headerItem != None:
- headerText = headerItem.text()
- # print(headerText)
- listWidgeDt.append(headerText)
- # print(listWidgeDt)
-
- self.listWidget.addItems(listWidgeDt)
- self.listWidget.selectAll() # 设置全选
-
- def tableWidget2dataframe(self, tableWidget):
- data = []
- for r in range(self.tableWidget.rowCount()):
- row = []
- for c in range(self.tableWidget.columnCount()):
- item = self.tableWidget.item(r, c)
- if item is not None:
- row.append(item.text())
- else:
- row.append('')
- data.append(row)
- df = pd.DataFrame(data)
- return df
-
- def tW2df(self):
- print(self.tableWidget2dataframe(self.tableWidget))
-
- def forLoopListDerivationFormula_list(self):
- # 获取选中的文本
- # selectItem = self.listWidget.currentItem() # 返回选中的项(仅限单选)
- selectItem = self.listWidget.selectedItems() # 返回一个包含item对象的list对象
- select_item = [i.text() for i in selectItem]
- # print(select_item)
-
- tb_cols = self.tableWidget.columnCount()
- # 方法一:for循环
- list_c = []
- for i in select_item:
- for c in range(tb_cols):
- if self.tableWidget.horizontalHeaderItem(c).text() == i:
- # print(c)
- list_c.append(c)
- print(list_c)
- # 方法二:for循环列表推导式
- list_x = [c for i in select_item for c in range(tb_cols) if
- self.tableWidget.horizontalHeaderItem(c).text() == i]
- print(list_x)
-
- def forLoopListDerivationFormula_dict(self):
- # 获取选中的文本
- # selectItem = self.listWidget.currentItem() # 返回选中的项(仅限单选)
- selectItem = self.listWidget.selectedItems() # 返回一个包含item对象的list对象
- select_item = [i.text() for i in selectItem]
- # print(select_item)
-
- tb_cols = self.tableWidget.columnCount()
- dict_x = {c: i for i in select_item for c in range(tb_cols) if
- self.tableWidget.horizontalHeaderItem(c).text() == i}
- print(dict_x)
-
-
- if __name__ == '__main__':
- app = QApplication(sys.argv) # 在 QApplication 方法中使用,创建应用程序对象
- myWin = MyMainWindow() # 实例化 MyMainWindow 类,创建主窗口
- myWin.show() # 在桌面显示控件 myWin
- sys.exit(app.exec_()) # 结束进程,退出程序

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。