目录
此数据筛选标记源代码及exe下载地址点击如下:
https://download.csdn.net/download/weixin_51631044/88400094
在编写该exe文件的时候,首先需要知道需要那些工具以及思路和需求,这样才能更好的解决整体设计以及调整方案。
1. 选择excel表格文件进行指定字符所在行进行标记
2. 需要指定列的指定字符
3. 指定的excel子表格Sheet名称
4. 标记完成后清除标记(防止上一次的标记未清除影响下一次的判断)
5. 标记内容输入到文本窗口(方便查看标记的内容,不用打开excel表格)
6. 清除文本框的内容,有利于查看内容
1. 首先设计GUI窗口和文本框
2. 设计相应的需求按钮
3. 相应标签与输入框的设计
4. 利用虚拟环境将GUI转化成exe格式
整个过程的设计需要python的多种库与转化成exe格式的方法工具,涉及到的如下:
- import tkinter
- import os
- import xlrd # 导入读取excel表格的xlrd库
- import pandas as pd
- from openpyxl import load_workbook # 导入表格
- from openpyxl.styles import PatternFill # 用于标记
- from tkinter import filedialog, dialog #打开文件
-
- pyinstaller #打包成exe文件的库
整个过程我们需要窗口库、读取表格库、导入表格库、标记库、打开文件库
- #导入图形窗口界面库
- import tkinter
- import os
- import xlrd # 导入读取excel表格的xlrd库
- import pandas as pd
- from openpyxl import load_workbook # 导入表格
- from openpyxl.styles import PatternFill # 用于标记
- from tkinter import filedialog, dialog #打开文件库
在创建图形窗口的过程中需要设计窗口的名字以及长宽,具体的设计如下:
- #创建GUI图形窗口
- def create_tk():
- window = tkinter.Tk() #创建窗口
- window.title('数据筛选标记') #给图形窗口命名
- window.geometry('900x400') #设置图像窗口宽、高
- return window
这里使用了窗口中的title、geometry方法
整个过程中需要输入列、输入筛选字符、输入Sheet名、输入筛选表格路径、被标记内容输出
- #标签设置
- def set_label(window):
- tkinter.Label(window, text='输入列').place(width=80, height=25, x=20, y=150) # “用户”文字标签
- tkinter.Label(window, text='输入筛选字符').place(width=100, height=25, x=20, y=200)
- tkinter.Label(window, text='输入sheet名').place(width=80, height=25, x=20, y=250)
- tkinter.Label(window, text='输入带筛选表格路径').place(width=120, height=25, x=20, y=100)
- tkinter.Label(window, text='被标记内容输出').place(width=120, height=25, x=550, y=10)
其中使用tkinter库的Label方法,他的使用方法为依次输入窗口名、标签文本、标签长宽、标签位置
方法按钮的设计是为了点击按钮执行某个方法,这样能够简化我们的开发过程,其中使用tkinter中Button方法,依次添加窗口名、按钮文本、执行命令、按钮文本的长宽,最后按钮的位置设置
- #方法按钮
- def method_button(window,entry1,entry2,entry3,entry4,text_widget):
- sheet_index, row, start_rowx, end_rowx, start_colx = init()
- button11 = tkinter.Button(window,text='退出',
- command=lambda :window.destroy(),width=3,height=2) #相当于使用destroy方法
- button11.place(x=250,y=320,anchor='nw') #自由设置按钮位置
- button12 = tkinter.Button(window,text='打开待筛选表格文件',
- command=open_file,width=20,height=2) #
- button12.place(x=40,y=10,anchor='nw') #自由设置按钮位置
- button13 = tkinter.Button(window,text='标记',command= lambda:mark_cells(text_widget,row,entry3.get(),entry2.get(),int(entry1.get()),entry4.get()),width=3,height=2)
- button13.place(x=50,y=320,anchor='nw') #自由设置按钮位置
- button14 = tkinter.Button(window, text='清除标记',command=lambda: clear_mark(entry4.get(),entry3.get()),width=6,height=2)
- button14.place(x=140, y=320, anchor='nw') # 自由设置按钮位置
- button15 = tkinter.Button(window, text='清除',command=lambda: clear_print_text(text_widget),width=3,height=1)
- button15.place(x=840, y=8, anchor='nw') # 自由设置按钮位置
输入框的设置是为了方便整体需求的直接输入,方便操作,使用了tkinter库的Entry输入框方法
- #输入框设置
- def input_tk(window):
- entry1 = tkinter.Entry(window,width=20) #加show='*'属于加密行为
- entry1.place(x=150,y=150)
- entry2 = tkinter.Entry(window,width=20)
- entry2.place(x=150,y=200)
- entry3 = tkinter.Entry(window,width=20)
- entry3.place(x=150,y=250)
- entry4 = tkinter.Entry(window,width=20)
- entry4.place(x=150,y=100)
- return entry1 ,entry2,entry3,entry4
这里需要将输入框进行返回,方便后面的使用
此处为了将标记的内容输出在exe文件中做的设计,方便使用者使用。其中使用tkinter的文本方法Text,依次输入高和宽,以及输出窗口的位置
- # 创建一个文本输出框组件
- def print_text():
- text_widget = tkinter.Text(height=25, width=80, yscrollcommand='set')
- text_widget.place(x=320, y=40)
- scrollbar_y = tkinter.Scrollbar(command=text_widget.yview, orient='vertical')
- scrollbar_x = tkinter.Scrollbar(command=text_widget.xview, orient='horizontal')
- text_widget.configure(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
- scrollbar_y.pack(side='right', fill='y')
- scrollbar_x.pack(side='bottom', fill='x')
- return text_widget
此处还使用了文本框滑动条Scrollbar,这样为了解决内容过多时的查看。
- #清除文本框内容
- def clear_print_text(text_widget):
- text_widget.delete(1.0, tkinter.END)
将(六)中返回的文本框使用在删除方法中,使用delete方法来解决这个问题。
- # 初始化所需数据
- def init():
- sheet_index =0 # 指定excel中的子表格
- row =0 # 初始行
- start_row =0 # 开始行
- end_row = None # 结束行
- start_col =0 # 开始列
- return sheet_index ,row ,start_row ,end_row ,start_col
- def mark_cells(text_widget,row ,sheet, str_type, col, file_path):
- df = pd.read_excel(file_path, engine='openpyxl') #读取表格
- data_excel = xlrd.open_workbook(file_path) # 打开excel表格
- table = data_excel.sheet_by_name(sheet) # 通过索引获取表格中的子表格
- n_rows = table.nrows # 获取该sheet中的有效行数
- n_cols = table.ncols # 获取该sheet中的有效列数
- workbookB = load_workbook(file_path)
- sheetB = workbookB[sheet]
- for rowB in sheetB.iter_rows(1, n_rows, col, col): # 遍历表A每个单元格
- for cellB in rowB:
- valueB = str(cellB.value) # 强制转换为字符串
- if str_type in valueB:
- fills = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
- row = row + 1
- for i in range(n_cols):
- sheetB.cell(row, i + 1).fill = fills
- # 读取被标记行内容
- row_contents =df.iloc[row-2].tolist()
- # 在文本输出框中插入文本
- text_widget.insert(tkinter.END, '第%s行输出的内容:\n'%(row))
- text_widget.insert(tkinter.END ,str(row_contents)+'\n')
- else:
- row = row + 1
- workbookB.save(file_path)
使用PatternFill方法进行标记
- #清除表格标记
- def clear_mark(file_path,sheet):
- workbookB = load_workbook(file_path)
- sheetB = workbookB[sheet]
- for row in sheetB.iter_rows():
- for cell in row:
- if cell.fill:
- cell.fill = PatternFill(start_color='FFFFFF', end_color='FFFFFF', fill_type='solid')
- workbookB.save(file_path)
清除标记则使用PatternFill方法将其中的颜色换成白色即可
python设计的GUI界面需要转化为exe格式才能更好的方便操作,因此需要使用pyinstaller库则可以操作,方法如下:
pyinstaller -F test.py -w
使用该命令的时候,一定要在对应所需转化的.py文件目录下才可以。比如我的py文件在E:\python程序\数据筛选目录下,因此在dos命中切换到对应的路径再进行使用pyinstaller方法将其转化为exe格式。

但是此种方法将会导致exe格式过大,因此需要采取另外的方法进行解决,我们采用创建windows虚拟环境来解决这个问题。
- conda create -n 虚拟环境名字 python==3.8 #根据自己所安装的版本创建虚拟环境
- conda activate 虚拟环境名字(我设置为Test_GUI) #激活虚拟环境
- conda deactivate #退出虚拟环境
1. 从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为Test_GUI,且基于python版本3.8的虚拟环境
2. 在创建过程中需要回复(y/n),Yes,再激活虚拟环境
3. 在该虚拟环境下安装所需库,安装方法如下:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名称
这里将下面的所有库进行安装:
- tkinter
- xlrd # 导入读取excel表格的xlrd库
- pandas
- openpyxl # 导入表格
- pyinstaller #打包成exe文件的库
4. 使用如下方法查看安装所需库是否完全安装好

创建好了之后,在该虚拟环境下切换目录至E:\python程序\数据筛选,输入如下命令:
pyinstaller -F test.py -w

等待运行完毕即可得到exe文件较小的格式
打包之后在你的dist中有一个exe文件,打开即可,打开展示结果如下:

