概念
本文主要阐述在项目《自动提取pdf指定页》中对ui界面的处理方式。若对项目需求不清楚的用户,请先查看文章《帮你自动化办公的python - 自动提取pdf指定页(项目概述)》。
介绍
本项目用到处理ui界面的模块是Tkinter,它是Python 的标准GUI库。可以使用它快速的创建GUI应用程序。
另外Tkinter是内置到python的安装包中、只要安装好Python之后就能import Tkinter 库、对于简单的图形界面Tkinter 还是能应付自如。
原计划本项目ui界面使用pyqt5搭建,考虑到功能比较简单单一,所以就直接使用内置Tkinter库完成ui相关的工作,毕竟杀鸡焉用牛刀嘛。
核心
1. 打开文件和目录。通过调用接口askopenfilename和askdirectoy实现,可以通过参数initialdir指定初始目录位置,filetypes指定打开某一类文件。
# 打开单个指定后缀格式文件,suffix:后缀,格式为('*.txt、*.pdf') # 返回:完整文件名 def open_file(self, suffix): return filedialog.askopenfilename(filetypes=(('pdf files', suffix),)) # 打开多个指定后缀格式文件,suffix:后缀,格式为('*.txt、*.pdf') # 返回:完整文件名列表 def open_files(self, file, suffix): return filedialog.askopenfilenames(filetypes=(('pdf files', '*.pdf'),)) # 打开目录,init:默认路径 # 返回路径 def open_dir(self, init, title): return filedialog.askdirectory(initialdir=init, title=title)
2.显示提示框。通过调用接口messagebox.showinfo实现,标题和提示内容通过参数传入指定。
# 显示提示信息 title:标题 msg:提示内容 def show_msg(self, title, msg): tkinter.messagebox.showinfo(title=title, message=msg)
3. 创建按钮和窗口。通过实例化Button和Tk对象实现,传入参数较多,包括按钮响应函数、尺寸、位置等。
# 创建按钮 text:按钮内容 func:响应函数 width:宽 row:行坐标 col:列坐标 def new_btn(self, text, func, width, row, col): return Button(text=text, command=func, width=width).grid(row=row, column=col) # 按钮 # 创建窗口, title:窗口名 # 返回:窗口对象 def new_form(self, title): form = Tk() form.title(title) return form
4. 设置窗口相关属性。通过调用geometry接口实现。
# 设置窗口宽高及位置,且宽高不可变 form:窗口对象 width:宽 height:高 x:行坐标 y:列坐标 def set_form_size(self, form, width, height, x, y): alignstr = '%dx%d+%d+%d' % (width, height, x, y) form.geometry(alignstr) # 设置窗口是否可变长、宽,True:可变,False:不可变 form.resizable(width=False, height=False) # 设置窗口居中显示,且宽高不可变 form:窗口对象 width:宽 height:高 def set_form_centre(self, form, width, height): # 根据屏幕尺寸和窗口尺寸,计算屏幕中心位置 max_width = form.winfo_screenwidth() max_height = form.winfo_screenheight() x = (max_width-width) / 2 y = (max_height-height) / 2 self.set_form_size(form, width, height, x, y)
示例
★f_tkinter对象(ui界面操作类):
属性:无
行为:打开文件/目录、创建窗口/按钮、设置窗口位置、提示框。
f_tkinter.h
import tkinter import tkinter.filedialog as filedialog from tkinter import* import tkinter.messagebox # tkinter操作定义 class f_tkinter(object): def __init__(self,): pass # 打开单个指定后缀格式文件,suffix:后缀,格式为('*.txt、*.pdf') # 返回:完整文件名 def open_file(self, suffix): return filedialog.askopenfilename(filetypes=(('pdf files', suffix),)) # 打开多个指定后缀格式文件,suffix:后缀,格式为('*.txt、*.pdf') # 返回:完整文件名列表 def open_files(self, file, suffix): return filedialog.askopenfilenames(filetypes=(('pdf files', '*.pdf'),)) # 打开目录,init:默认路径 # 返回路径 def open_dir(self, init, title): return filedialog.askdirectory(initialdir=init, title=title) # 显示提示信息 title:标题 msg:提示内容 def show_msg(self, title, msg): tkinter.messagebox.showinfo(title=title, message=msg) # 创建按钮 text:按钮内容 func:响应函数 width:宽 row:行坐标 col:列坐标 def new_btn(self, text, func, width, row, col): return Button(text=text, command=func, width=width).grid(row=row, column=col) # 按钮 # 创建窗口, title:窗口名 # 返回:窗口对象 def new_form(self, title): form = Tk() form.title(title) return form # 设置窗口宽高及位置,且宽高不可变 form:窗口对象 width:宽 height:高 x:行坐标 y:列坐标 def set_form_size(self, form, width, height, x, y): alignstr = '%dx%d+%d+%d' % (width, height, x, y) form.geometry(alignstr) # 设置窗口是否可变长、宽,True:可变,False:不可变 form.resizable(width=False, height=False) # 设置窗口居中显示,且宽高不可变 form:窗口对象 width:宽 height:高 def set_form_centre(self, form, width, height): # 根据屏幕尺寸和窗口尺寸,计算屏幕中心位置 max_width = form.winfo_screenwidth() max_height = form.winfo_screenheight() x = (max_width-width) / 2 y = (max_height-height) / 2 self.set_form_size(form, width, height, x, y)
往期 · 推荐
帮你自动化办公的python-自动提取pdf指定页(文件处理篇)
帮你自动化办公的python-自动提取pdf指定页(项目概述)
也没想象中那么神秘的数据结构-一种通用化的双向链表设计(底层源码)
关注
更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要本文章源码请关注公众号:不只会拍照的程序猿,后台回复:PDF拆解源码,也可点击此处下载。