- 最近在完善之前做的一个基于人脸识别的打卡签到系统,在添加人脸信息时,手动输入学生信息太慢了,因此改进,增加一个新的功能:手动点击“导入数据”即将excel表中的数据加载到qt的下拉列表中
- 操作演示如下:
- 设计思路
3.1 首先设置界面(包括导入按钮,下拉列表)
3.2 其次实现导入数据的功能
3.3 然后实现下拉列表功能
3.4 最后导入数据和下来列表的结合 - 代码
import sys
import pandas as pd
from PyQt5.QtWidgets import *
class ImportData(QWidget):
def __init__(self,parent=None):
super(ImportData, self).__init__(parent)
self.setWindowTitle('导入数据到下拉列表的例子')
self.resize(300,200)
self.button = QPushButton('导入数据')
layout=QVBoxLayout()
self.btn1=QLabel('')
self.cb=QComboBox()
self.cb.currentIndexChanged.connect(self.selchange)
layout.addWidget(self.button)
layout.addWidget(self.cb)
layout.addWidget(self.btn1)
self.setLayout(layout)
self.button.clicked.connect(self.import_data)
def import_data(self):
filename, rel = QFileDialog.getOpenFileName(self, "导入数据", ".", "EXCEL(*.xlsx)")
print(filename)
path = filename
data = pd.read_excel(path, None)
print("ok")
print(data.keys())
for sh_name in data.keys():
print('sheet_name的名字是:', sh_name)
sh_data = pd.DataFrame(pd.read_excel(path, sh_name))
for l in sh_data['姓名']:
self.cb.addItem(l)
print(sh_data['姓名'])
self.cb.currentIndexChanged.connect(self.selchange)
def selchange(self,i):
self.btn1.setText(self.cb.currentText())
for count in range(self.cb.count()):
print('Item'+str(count)+'='+self.cb.itemText(count))
print('current index',i,'selection changed',self.cb.currentText())
if __name__ == '__main__':
app=QApplication(sys.argv)
importdata = ImportData()
importdata.show()
sys.exit(app.exec_())
- 可以直接将代码拷贝到新建的py文件中运行。另外excel表中的第一列是姓名,可以在代码中做修改。
- 是在另外一个博主的基础上做的。见链接:PyQt5基本控件详解之QComboBox(九)
- 关于下拉列表框的详细讲解见链接:PyQT5控件:下拉列表框(QComboBox)
- 关于pyqt5操作手册键连接:PyQt5-Chinese-tutorial