python自带gui插件tkinter使用小结
1.tkinter简介
Tkinter(即 tk interface,简称“Tk”)本质上是对 Tcl/Tk 软件包的 Python 接口封装,它是 Python 官方推荐的 GUI 工具包,属于 Python 自带的标准库模块,当您安装好 Python 后,就可以直接使用它,而无须另行安装。
作为一款 Python GUI 工具,Tkinter 拥有良好的跨平台性,支持 Windows、Linux、Mac 平台,它传承了 Python 语法简洁、代码易读的基本特点。
与其他编程语言的 GUI 工具包相比,Tkinter 编码效率高,能够实现快速开发的目的,非常适合初学者学习。Tkinter 使用纯 Python 语言开发,与 C/C++ 开发的 Qt 框架相比,Tkinter 有自身的局限性,比如性能、功能丰富程度等都不及 Qt,因此它只适合开发一些简单的程序,比如计算器的界面
引用自tkinter简介
2.常用组件方法
3.补充
3.1.文件、文件夹选择框
一般而言,将文件选择或文件夹选择绑定在一个按钮上
文件选择
import filedialog
def choose_directory():
virtual_file_path = tkinter.filedialog.askopenfilename(title=u'选择文件')
pass
tk.Button(frame, text="选择文件", command=choose_directory).grid(row=3, column=4)
文件夹选择
def choose_directory():
file_path = tk.filedialog.askdirectory(title=u'选择文件夹')
tk.Button(frame, text="选择文件夹", command=choose_directory).grid(row=2, column=4)
3.2.布局方法及布局控件的选择
建议在使用时尽可能的使用布局控件,例如frame等,然后在布局控件中使用布局方法,方便进行布局的控制
3.3. 控件的variable/textvariable
大部分控件都有variable/textvariable属性,此属性相当于将值绑定到对应的变量上,一般为StringVar,也可以作为设置默认值使用,不同控件可以绑定同一个变量
3.4.Entry/Spinbox控件的validate、validatecommand、invalidcommand方法
validate:校验的逻辑:包含 "none", "focus", "focusin", "focusout", "key", "all",一般使用key即可,默认为None,不校验
validatecommand:当校验开启时,触发的方法,必须返回True或者False
invalidcommand:当validatecommand方法返回False时触发此方法
使用实例
def rule(val):
return val.isdigit() or val == ""
def incorrect():
logger.error("memory enter not digit")
# 需要手动注册校验规则
validate = (window.register(rule), "%P")
spinBox = tk.Spinbox(frame, from_=0,to=100, validate="key", validatecommand=validate, invalidcommand=incorrect)
3.5.子窗口创建及防止重复点击,重复出现
此处以菜单创建子窗口为例
def about():
# 当打开子窗口时禁用后方的主窗口,达到防止重复点击的效果
window.attributes("-disabled", True)
about_window = Toplevel(window)
about_window.title("关于")
about_window.resizable(0, 0)
about_window.focus()
about_window.geometry(f'{int(WIDTH/4)}x{int(HEIGHT/4)}+{int((window.winfo_screenwidth() - (WIDTH / 4))/2)}+{int((window.winfo_screenheight() - (HEIGHT / 4))/2)}')
# 当子窗口销毁时,聚焦到主窗口上,并撤销禁用,销毁子窗口
def delete_window():
window.focus()
window.attributes("-disabled", False)
about_window.destroy()
# 窗口销毁时触发的回调
about_window.protocol("WM_DELETE_WINDOW", delete_window)
about_menu = Menu(window)
about_menu.add_command(label="关于", command=about)
3.6.执行耗时操作
在界面执行耗时操作时建议使用多线程方式执行,否则会导致窗口卡死
3.7.常用输入框删除、添加内容
# 删除内容
text.delete(0, tkinter.END)
# 添加内容
text.insert(tkinter.INSERT, "text")
# 将光标置于最后
text.see(tkinter.END)
常见问题
1. 关于当一个页面跳转到另一个页面,部分控件失效的问题?
例如用户登录界面跳转到主界面时,用户登录界面该使用隐藏,还是最小化,还是销毁呢?
一般来说都可以,隐藏的可以保留数据,但是在一次使用过程中发现有一个控件在使用隐藏或者最小化时会出现控件失效的情况,就是多选按钮CheckButton
控件,它只能将用户登录界面销毁后才可以正常获取值,因此需要我们格外注意,其他的目前发现并未失效,可以使用隐藏或者最小化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现