python之tkinter学习笔记

目录

Widget概览

加强版的tkinter模块

一、通用的

1.1、Label

PhotoImage (gif图片加载)

jpg图片加载

config方法-计时器

1.2、PanedWindow

1.3、LabelFrame

二、tkinter专有

2.1、Menu菜单复选框

2.2、工具栏

三、tkinter.ttk专有

3.1、Separator分隔线

3.2、notebook

3.3、Progressbar进度条

3.4、Combobox

3.5、Sizegrip

3.6、Treeview


【还在学习中。。。】

Widget概览

以下这些都叫Widget,可以翻译为控件、组件或部件,共19个。

在tkinter中所有的Widget其实都是面向对象的类,我们通过调用构造方法来达到创建相关Widget控件的目的。先创建窗口->窗口内创建控件。

1按钮Button【tkinter、tkinter.ttk】
2复选框Checkbutton【tkinter、tkinter.ttk】
3文本框Entry【tkinter、tkinter.ttk】
4框架Frame【tkinter、tkinter.ttk】
5标签Label(父对象,options)【tkinter、tkinter.ttk】
6标签框架LabelFrame【tkinter、tkinter.ttk】
7菜单按钮MenuButton【tkinter、tkinter.ttk】
8单选按钮Radiobutton【tkinter、tkinter.ttk】
9尺度Scale【tkinter、tkinter.ttk】
10滚动条Scrollbar【tkinter、tkinter.ttk】
11面板PanedWindow【tkinter、tkinter.ttk】
12画布Canvas【tkinter】
13列表框Listbox【tkinter】
14菜单Menu【tkinter】
15消息Message【tkinter】
16下拉式菜单OptionMenu【tkinter】
17可微调输入控件Spinbox【tkinter】
18文字区域Text【tkinter】
19上层窗口Toplevel【tkinter】

加强版的tkinter模块

tkinter.ttk,有时简称为ttk,该模块中有17个Widget。

以下11个在tkinter中原本就存在的Widget:

Button、Checkbutton、Entry、Frame、Label、LabelFrame、MenuButton、Radiobutton

Scale、Scrollbar、PanedWindow

以下6个是ttk内新增的Widget:

Combobox
Notebook
Progressbar进度条
Separator 分隔线Separator(父对象,options)
Sizegrip
Treeview

一、通用的

1.1、Label

from tkinter import *

root=Tk()
root.title("ch2_1")
# label=Label(root,text="abcdefghijkllmnopqrstuvwxyz",
#             fg='blue',bg='yellow',
#             height=3,width=15,
#             anchor="s",
#             wraplength=80,
#             font="Helvetica 20 bold",
#             justify="center")
# label=Label(root,bitmap='gray25',compound="left",text="我的天空")
# label=Label(root,text="我的天空",relief="solid")
label=Label(root,text="raised",relief="raised",bg="lightyellow",padx=5,pady=10)
label.pack()
# print(type(label))

PhotoImage (gif图片加载)

from tkinter import *

root=Tk()
root.title("ch2_19")
mgif=PhotoImage(file='1.gif')
# label=Label(root,image=mgif)
label=Label(root,image=mgif,text='mylove',bg='yellow',compound='center',font='Helvetica 40 bold')
label.pack()

root.mainloop()

jpg图片加载

jpg图片的加载需要借助pillow库,注意tkinter中也有Image方法,所以导入的顺序不能错了

from tkinter import *
from PIL import Image,ImageTk

root=Tk()
root.title("ch2_19_2")
# root.geometry("680x400")
image=Image.open('1.jpg')
image2=ImageTk.PhotoImage(image)
text="arjkdkgkdghdgkdkjgkdfjgkjgdlkfjgdfk"
label=Label(root,image=image2,text=text,compound='center',
            font='Helvetica 40 bold',justify='left',wraplength=300)
label.pack()

root.mainloop()

config方法-计时器

from tkinter import *

counter=0
def run_counter(digit):
    def counting():
        global counter
        counter+=1
        digit.config(text=str(counter))
        digit.after(1000,counting)
    counting()

root=Tk()
root.title("ch2_23")
digit=Label(root,bg='yellow',fg='blue',height=3,width=10,
            font='Helvetic 20 bold')
digit.pack()
run_counter(digit)
root.mainloop()

这段代码使用了Python中的闭包(closure)和装饰器(decorator)的概念,以及Tkinter库中的GUI组件更新机制。

  1. ​def run_counter(digit)​: 这是一个函数定义,它接受一个参数 ​digit​,这个参数是一个Tkinter的Label或其他可以显示文本的GUI组件。

  2. ​def counting()​: 这是一个嵌套函数(nested function),它定义在 ​run_counter​ 函数内部。这个函数的作用是每秒钟更新一次全局变量 ​counter​ 的值,并将更新后的值显示在 ​digit​ 这个GUI组件上。

  3. ​digit.config(text=str(counter))​: 这行代码更新 ​digit​ 这个GUI组件的文本内容,将其设置为当前 ​counter​ 的值。

  4. ​digit.after(1000, counting)​: 这行代码使用Tkinter的 ​after​ 方法,它会在1000毫秒(即1秒)后调用 ​counting​ 函数,从而实现每秒钟更新一次计数器的效果。

总结来说,这是一种使用闭包和装饰器模式来创建一个定时更新GUI组件的计数器的写法。闭包允许内部函数 ​counting​ 访问外部函数 ​run_counter​ 的参数 ​digit​,而装饰器模式则允许 ​counting​ 函数在每次调用后自动安排下一次调用,从而实现定时更新。

1.2、PanedWindow

from tkinter import *

pw=PanedWindow(orient=VERTICAL)
pw.pack(fill=BOTH,expand=True)

top=Label(pw,text="Top Pane")
pw.add(top)

buttom=Label(pw,text="Bottom Pane")
pw.add(buttom)

pw.mainloop()

1.3、LabelFrame

from tkinter import *
from tkinter.ttk import *

root=Tk()
root.title("ch14_3")

pw=PanedWindow(orient=HORIZONTAL)

leftFrame=LabelFrame(pw,text="Left Pane",width=120,height=150)
pw.add(leftFrame,weight=2)
middleFrame=LabelFrame(pw,text="Middle Pane",width=120)
pw.add(middleFrame,weight=2)
rightFrame=LabelFrame(pw,text="Right Pane",width=120)
pw.add(rightFrame,weight=1)
pw.pack(fill=BOTH,expand=True,padx=10,pady=10)

root.mainloop()

二、tkinter专有

2.1、Menu菜单复选框

from tkinter import *


def status():
    if demoStatus.get():
        statusLabel.pack(side=BOTTOM, fill=X)
    else:
        statusLabel.pack_forget()


root = Tk()
root.title("ch16_10")
root.geometry("300x180")

menubar = Menu(root)
filemenu = Menu(menubar, tearoff=False)
menubar.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='Exit!', command=root.destroy)
viewmenu = Menu(menubar, tearoff=False)
menubar.add_cascade(label='View', menu=viewmenu)
demoStatus = BooleanVar()
demoStatus.set(True)
viewmenu.add_checkbutton(label='View', command=status, variable=demoStatus)
root.config(menu=menubar)

# statusVar = StringVar()
# statusVar.set("显示")
# statusLabel = Label(root, textvariable=statusVar, relief='raised')
# statusLabel.pack(side=BOTTOM, fill=X)

statusLabel = Label(root, text="显示", relief='raised')
statusLabel.pack(side=BOTTOM, fill=X)

root.mainloop()

2.2、工具栏

from tkinter import *

root=Tk()
root.title("ch16_11")
root.geometry("300x180")

menubar=Menu(root)
filemenu=Menu(menubar,tearoff=False)
menubar.add_cascade(label='File',menu=filemenu)
filemenu.add_command(label='Exit!',command=root.destroy)

toolbar=Frame(root,relief=RAISED,borderwidth=3)
mygif=PhotoImage(file='2.gif')
exitBtn=Button(toolbar,image=mygif,command=root.destroy)
exitBtn.pack(side=LEFT,pady=3,padx=3)
toolbar.pack(side=TOP,fill=X)

root.config(menu=menubar)

root.mainloop()

 

三、tkinter.ttk专有

3.1、Separator分隔线

from tkinter import *
from tkinter.ttk import Separator

root=Tk()
root.title("ch2_26")
myTitle="一个人的几经履行"
myContent="""2016年12月,我一个人订了机票和船票,
开始我的南极旅行,飞机经独白再往阿根廷的乌斯怀亚,
再次我登上的邮轮开始我的南极之旅"""
lab1=Label(root,text=myTitle,font="Helvetic 20 bold")
lab1.pack()
sep=Separator(root,orient=HORIZONTAL)
sep.pack(fill=X,padx=5)
lab2=Label(root,text=myContent)
lab2.pack(padx=10,pady=10)
root.mainloop()

pack的部分参数

fill=x填满x轴
padx=10与窗口边界左右均相差10px
pady=10与窗口边界上下均相差10px

3.2、notebook

from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox


def msg():
    messagebox.showinfo("Help", "欢迎使用帮助")


root = Tk()
root.title("ch14_7")
root.geometry("300x160")

notebook = Notebook(root)
notebook.pack(fill=BOTH, expand=True)

frame1 = Frame()
frame2 = Frame()
notebook.add(frame1, text="选项卡1")
notebook.add(frame2, text="选项卡2")

label = Label(frame1, text="Python")
label.pack(pady=10)

btn = Button(frame2, text="Help", command=msg)
btn.pack(pady=10)

root.mainloop()

 

3.3、Progressbar进度条

from tkinter import *
from tkinter.ttk import *


def load():
    pb["value"] = 0
    pb["maximum"] = maxbytes
    loading()


def loading():
    global bytes
    bytes += 500  # 模拟每次下载500B
    pb["value"] = bytes  # 设置指针
    if bytes < maxbytes:
        pb.after(50, loading)  # 经过0.05s继续执行loading


root = Tk()
root.title("ch15_3")
root.geometry("300x180")

bytes = 0  # 设置初值
maxbytes = 10000  # 架设下载文件大小

pb = Progressbar(root, length=200)
pb.pack(pady=10, padx=10)
pb["value"] = 0  # 初始值

btn = Button(root, text="Load", command=load)
btn.pack(pady=10)

root.mainloop()

 

3.4、Combobox

3.5、Sizegrip

3.6、Treeview

学习书籍:《Python GUI设计tkinter菜鸟编程(增强版) 洪锦魁 主编 2024-02-01》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C++ 宾馆酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

LeetCode-47. 全排列 II【】

TOC 题目描述&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输…

InnoDB Data Locking - Part 2.5 “Locks“ (Deeper dive)

All together now 现在让我们把在 InnoDB Data Locking – Part 2 “Locks” 中学习到的有关表锁和记录锁的知识结合起来&#xff0c;以理解以下情况&#xff1a; 我们看到&#xff1a; 第一个 SELECT * FROM t FOR SHARE; 在 5、10、42 和 supremum 伪记录上创建了 S 锁。…

【软件设计师】2022年上半年真题解析

​​冯诺依曼计算机体系结构的基本特点是&#xff1a; A. 程序指令和数据都采用二进制表示 - 这是正确的&#xff0c;因为冯诺依曼架构下的计算机使用二进制形式来表示和处理所有信息&#xff0c;包括指令和数据。 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速…

Discuz_X3.5各行业资料文档下载模板

下载地址&#xff1a;Discuz_X3.5各行业资料文档下载模板

验证外星语词典

在解决算法题时&#xff0c;哈希表是经常被使用的工具&#xff0c;可以用来记录字符串中字母出现的次数&#xff0c;字符串中字符出现的位置等&#xff0c;这里用到的就是利用哈希表储存字符串中字符出现的的位置。 “外星语”的字母表顺序是不一样的&#xff0c;所以…

python数据预处理

PYTHON 最流行库&#xff1a;Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库&#xff0c;由于代码是基于数学公式运行的&#xff0c;因此就会使用到它。Maplotlib&#xff08;具体而言&#xff0c;Matplotlib.pyplot&#xff09;则是满足绘图所需要的库。Pa…

创建一个支持切换阅读模式和答题模式的Anki问答题模板

为了备考某个需要默写的科目&#xff0c;做了个问答题笔记模板&#xff0c;如下&#xff1a; 在上图的回答栏填写答案后&#xff0c;点击显示答案按钮转到背面&#xff1a; 只实现上面的功能是很简单的&#xff0c;直接基于Anki自带的问答题模板添加自己需要的字段即可。问题…

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…

Linux CPU占用高问题

1、top命令和历史系统监控找出持续占用CPU的top5进程。 # top -c 依次按键盘键b->x&#xff0c;按照CPU由高到底排序。shiftP和shiftM切换使用CPU和内存的排序 # top -Hp pid 查看进程中所有线程的占用情况 # top -Hp 1124 -n 1 -b | awk {print $NF} | sort | uniq -c |…

Python | 自动探索性数据分析(EDA)库SweetViz

SweetViz是一个开放源代码Python库&#xff0c;主要用于生成精美的高密度可视化文件&#xff0c;启动探索性数据分析&#xff08;EDA&#xff09;&#xff0c;输出为完全独立的HTML应用程序。 探索性数据分析&#xff08;EDA&#xff09;是分析和总结数据集主要特征的过程&…

pytorch学习笔记5

transform 本质上作用是将图片通过transform这个这个工具箱获取想要的结果 tensor就是一个包含神经网络需要的一些理论基础的参数 from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from PIL import Image #tensor数据类型 #通过tra…

Linux系统上的磁盘扩展总结

目录 一、前言 二、相关基础知识 &#xff08;1&#xff09;术语理解 &#xff08;2&#xff09;相关命令学习 1、磁盘管理相关命令 2、LVM管理相关命令 三、磁盘操作场景汇总 &#xff08;1&#xff09;添加新硬盘后挂载到已有目录进行扩容 &#xff08;2&#xff09…

Python 二叉数的实例化及遍历

首先创建一个这样的二叉树&#xff0c;作为我们今天的实例。实例代码在下方。 #创建1个树类型 class TreeNode:def __init__(self,val,leftNone,rightNone):self.valvalself.leftleftself.rightright #实例化类 node1TreeNode(5) node2TreeNode(6) node3TreeNode(7) node4Tre…

【数据结构与算法】七大排序算法(下)

【数据结构与算法】七大排序算法(下) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 2.3 交换排序 2.3.1 冒泡排序 2.3.2 快速排序 2.3.3 快速排序(非递归) 2.4 归并…

【一刷《剑指Offer》】面试题 30:最小的 k 个数

牛客对应题目链接&#xff1a;最小的K个数_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接&#xff1a;LCR 159. 库存管理 III - 力扣&#xff08;LeetCode&#xff09; 核心考点 &#xff1a; topK 问题。 一、《剑指Offer》内容 二、分析题目 1、排序&#xff08;O(Nlo…

数据结构之二叉搜索树(TreeSetTreeMap)

目录 一.搜索树 1.1概念 1.2适用场景 2.二叉搜索树的基本操作 2.1二叉搜索树的定义 2.2查找 2.1.1基本思路 2.3插入 2.3.1基本思路 2.4删除 2.4.1基本思路 2.5遍历 2.6性能分析 二.TreeSet Map和Set 1.概念 2.模型 1.定义 2.基本操作 三.TreeMap 1.定义 2.基…

C语言笔记第9篇:字符函数和字符串函数

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中提供了一系列库函数&#xff0c;接下来我们就学习一下这些函数。 一、字符函数 1、字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;…

MyBatis一、MyBatis简介

MyBatis一、MyBatis简介 MyBatis 简介MyBatis 定义MyBatis 历史MyBatis 特性1. 灵活性和易用性2. 性能优化3. 易于集成4. 支持多种数据库5. 插件机制6. 其他特性 MyBatis 下载和其他持久化层技术对比 MyBatis 简介 MyBatis 定义 MyBatis 是一个优秀的持久层框架&#xff0c;它…

240602-通过命令行实现HuggingFace文件上传

A. 登录显示 A.1 MacOS A.2 Windows B. 操作步骤 B.1 操作细节 要通过命令行将文件上传到 Hugging Face&#xff0c;可以使用 huggingface-cli 工具。以下是详细步骤&#xff1a; 安装 huggingface_hub 包&#xff1a; 首先&#xff0c;确保已经安装了 huggingface_hub 包。可…