版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38358305/article/details/88087111
最近接到个同学给的小项目,配合他们节目做个题目检索器。
下图是题库的数据格式。
需求是要按sheet名以及难度(后续会按题组)返回对应的题目生成excel,并提供UI供操作。
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd
import tkinter as tk
from tkinter import ttk
def go(*args): #处理事件,数据处理部分
filename = '总题库索引.xlsx'
df = pd.read_excel(filename, sheet_name=careerChosen.get())
df['难度'] = df['难度'].fillna(method='pad', limit=1)
df['游戏版本'] = df['游戏版本'].fillna(method='pad', limit=1)
degree = degreeChosen.get()
df = df.loc[df['难度'] == degree]
df = df[
['问题', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4', 'Unnamed: 5', 'Unnamed: 6', 'Unnamed: 7', 'Unnamed: 8', '答案',
'游戏版本']]
ls = [column for column in df]
for i in range(len(ls)):
if ls[i][0] == 'U':
ls[i] = ''
df.columns = ls
outname =careerChosen.get()+degreeChosen.get()+'等难度.xlsx'
df.to_excel(outname,index=False)
print('已生成文件:%s'%outname) #打印选中的值
win = tk.Tk()
win.title("魔兽世界题目检索器") # 标题
ttk.Label(win, text="难度:").grid(column=1, row=0) # 添加一个标签,并将其列设置为1,行设置为0
ttk.Label(win, text="职业:").grid(column=0, row=0) # 设置其在界面中出现的位置 column代表列 row 代表行
# button被点击之后会被执行
def clickMe(): # 当acction被点击时,该函数则生效
# action.configure(text='数据导出') # 设置button显示的内容
# action.configure(state='disabled') # 将按钮设置为灰色状态,不可使用状态
go()
# 按钮
action = ttk.Button(win, text="生成题目", command=clickMe) # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
action.grid(column=2, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
# 创建一个下拉列表
career = tk.StringVar()
careerChosen = ttk.Combobox(win, width=12, textvariable=career)
careerChosen['values'] = ('征服者(以下)','创世者','火车王','名人堂','探险家','外交家','博学者','角斗士','生活家','特种兵') # 设置下拉列表的值
careerChosen.grid(column=0, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
careerChosen.current(0) # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
# 创建一个下拉列表
degree = tk.StringVar()
degreeChosen = ttk.Combobox(win, width=12, textvariable=degree)
degreeChosen['values'] = ('低','中','高') # 设置下拉列表的值
degreeChosen.grid(column=1, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
degreeChosen.current(0) # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
win.mainloop() # 当调用mainloop()时,窗口才会显示出来
这是界面。
因为要供无python环境的电脑使用,还需要将代码打包,使用的是pyinstaller。
需下载pyinstaller以及pywin32:
安装命令:1.pip install pywin32 2.pip install PyInstaller 3.pip install pywin32-ctypes
在cmd的py文件目录路径下输入 pyinstaller -F xxx.py即可。(exe文件在目录的dist文件夹中)
可能会遇到bug:
- Exception:
Cannot find existing PyQt5 plugin directories
Paths checked: C:\Qt\Qt5.3.1\5.3\msvc2013_64\plugins
- 解决方法就是用everything搜索PyQt5,找到 /Library/plugins路径下的PyQt5文件夹,将里面的dll动态库pyqt5.dll,pyqt5qmlplugin.dlll复制出来
- 按照错误提示的路径,一个个的新建文件夹,形成目录 C:\Qt\Qt5.3.1\5.3\msvc2013_64\plugins,将刚才复制出来的dll动态库拷贝进去即可
后续需求待更新。