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.常用组件方法

tkinter使用

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)

python自带gui插件tkinter使用小结的更多相关文章

  1. Python内建GUI模块Tkinter(一)

    Python主窗口 Python特定的GUI界面,是一个图像的窗口,tkinter是python自带的,可以编辑的GUI界面,我们可以用GUI实现很多一个直观的功能,如何想开发一个计算器,如果只是一个 ...

  2. Python内建GUI模块Tkinter(二)

    Python核心组件 1.Button 按钮组件:一个简单的按钮,用来执行一个命令或别的操作. 参数解析: text:指定按钮上显示的文本: anchor: 指定按钮上文本的位置(N, NE, E, ...

  3. Python内置GUI模块Tkinter的几点笔记

    组件属性,用法 组件位置 更多

  4. python GUI学习——Tkinter

    支持python的常见GUI工具包: Tkinter 使用Tk平台 很容易得到 半标准 wxpython 基于wxWindows.跨平台越来越流行 Python Win 只能在Windows上使用 使 ...

  5. python - Tkinter 模块 - python 自带的gui模块

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用. 1.创建窗口 from Tk ...

  6. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  7. Python:GUI库tkinter(一)

    学习自: Python GUI 编程(Tkinter) | 菜鸟教程 TkDocs_官方文档 1.几个常用的Python GUI库 tkinter:Python的标准Tk GUI工具包的接口. wxP ...

  8. Python GUI编程--Tkinter

    今天看到了GUI编程,书上推荐用wxPython,去官网上看了看,发现Windows的最高支持到2.7,我用的是3.4版本,咋办,用自带的库--Tkinter呗,它是Python的默认GUI库,几乎是 ...

  9. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...

随机推荐

  1. go thrift 开发

    thrift 从 0.9.1版本开始,可以完美支持 go 语言,可以完美的实现跨语言的 rpc 调用了.下面以 go 和 java 语言相互调用为例. 编辑协议文件,go 语言示例 /** examp ...

  2. 有关状压DP

    [以下内容仅为本人在学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] 引言 动态规划虽然已经是对暴力算法的优化,但在某些比较特别的情况下,可以通过一 ...

  3. 关于扑克牌的一些讨论——《Fluent Python 2》读书笔记

    一.说明 参考资料为维基百科的 Playing Card 词条,非严肃性论证,只是对代码为什么这么写做讨论. 二.扑克牌的起源 import collections Card = collection ...

  4. Spring Boot+微信小程序_保存微信登录者的个人信息

    1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...

  5. 706. Design HashMap - LeetCode

    Question 706. Design HashMap Solution 题目大意:构造一个hashmap 思路:讨个巧,只要求key是int,哈希函数选择f(x)=x,规定key最大为100000 ...

  6. CentOS6安装PLEX

    CentOS6安装PLEX 一.安装使用PLEX 1.1 安装 1)下载 https://www.plex.tv/downloads/ plexmediaserver-1.11.3.4803-c40b ...

  7. C#实现登录功能(连接SQLServer数据库)

    本例使用C#实现一个简单的登录功能,分为用户和管理员两个角色登录. 效果图: 核心代码 login.cs private void button1_Click(object sender, Event ...

  8. Nanodet模型部署(ncnn,openvino)/YOLOX部署(TensorRT)

    Nanodet模型部署(ncnn,openvino) nanodet官方代码库nanodet 1. nanodet模型部署在openvino上 step1: 参考链接 nanodet官方demo op ...

  9. .net core 抛异常对性能影响的求证之路

    一.前言 在.net 社区中曾经听到过很多关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问.项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题. 查阅了各种文档,微软官 ...

  10. cool-admin vite-vue3 打包部署 nginx代理设置

    location /api {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://xxx.com;}location /socket.io {rewrite ...