基础知识

采用 import tkinter as tk导入模块

窗口的创建与设置

窗口的创建和设置方法注释
root=Tk()生成主窗口
root.geometry('250x250')改变窗体大小(‘宽x高’),注意是x不是
root.geometry('+450+450')改变窗体位置(‘+横坐标+纵坐标’)
root.title('标题名')修改框体的名字
root.mainloop()显示主窗口
root.resizable(0, 0)将窗口大小设置为不可变
root.resizable(False, False)将窗口大小设置为不可变

核心组件

tkinter核心组件中文释义介绍
Label标签用来显示文字或图片
Button按钮类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作、事件
Entry单行文字域用来收集键盘输入
Text多行文字区域可用来收集(或显示)用户输入的文字
Frame框架包含其他组件的纯容器
Checkbutton选择按钮一组方框,可以选择其中的任意个
Listbox列表框一个选项列表,用户可以从中选择
Menu菜单点下菜单按钮后弹出的一个选项列表,用户可以从中选择
Menubutton菜单按钮用来包含菜单的组件(有下拉式、层叠式等等)
Message消息框类似于标签,但可以显示多行文本
Radiobutton单选按钮一组按钮,其中只有一个可被“按下” (类似 HTML 中的 radio)
Scale进度条
Scrollbar滚动条对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能
Toplevel顶级类似框架,但提供一个独立的窗口容器
Canvas画布提供绘图功能(直线、椭圆、多边形、矩形) ,可以包含图形或位图

初始化窗口

# 初始化窗口宽高
S_WIDTH = 500
S_HEIGHT = 300


class MyWindow:
    def __init__(self):
        self.window = tk.Tk()
        # 设置窗口标题
        self.window.title('ImageCape')
        self.window.wm_title('ImageCape')
        # 默认窗口包含标题栏
        self.window.overrideredirect(False)
        # 初始化窗口大小并自适应屏幕居中
        self.window.geometry(str(S_WIDTH) + 'x' + str(S_HEIGHT) + '+'
                             + str((self.window.winfo_screenwidth() - S_WIDTH) // 2) + '+'
                             + str((self.window.winfo_screenheight() - S_HEIGHT) // 2 - 18))

绑定事件

self.window.bind('<Configure>', self.window_resize)

核心组件详解

Button (根对象,[属性列表])

参数注释
text按钮文本内容
font字体(样式,大小)
bg (background)背景颜色(按钮颜色)
fg (foreground)前景颜色(字体颜色)
width按钮宽度
height按钮高度
command按钮关联的函数,当按钮被点击时,执行该函数
padx设置按钮文本与按钮边框x轴方向的距离
pady设置按钮文本与按钮边框y轴方向的距离
bd(borderwidth)按钮边框宽度
anchor控制按钮文本的位置(参数值:S,W,E,N,SE,SW,NW,NE,CENTER,默认为CENTER)
image与PhotoImage 一起使用,图片只能为gif格式
relief三维效果 (参数值:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT)
bitmap位图
compound图片和文字一同显示
cursor鼠标移动到框架时,光标的形状(参数值:arrow, circle, cross, plus 等)
justify显示多行文本的时候,设置不同行之间的对齐方式(参数值:LEFT, RIGHT, CENTER)
state设置按钮状态,参数值:NORMAL、ACTIVE、 DISABLED。默认 NORMAL
wraplength指定每行文本的宽度,单位是屏幕单元
underline下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,第二个字符带下划线,以此类推

Label (根对象,[属性列表])

参数注释
text标签名称
font字体(样式,大小)
bg(background)背景颜色(标签颜色)
fg(foreground)前景颜色(字体颜色)
width标签宽度
height标签高度
anchor锚选项,控制标签文本的位置(参数值:S.W,E,N,SE,SW,NW,NE,CENTER,默认为CENTER)
bitmap位图
relief三维效果(参数值:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为FLAT)
image与Photolmage一起使用,图片只能为gif图片
compound图片和文字一同显示
padx设置文本与标签边框x轴方向上距离
pady设置文本与标签边框y轴方向上的距离
cursor鼠标移动到框架时,光标的形状(参数值:arrow,circle,cross,plus等)
justify显示多行文本的时候,设置不同行之间的对齐方式(参数值:LEFT,RIGHT,CENTER)
state设置标签状态,参数值:NORMAL、ACTIVE、DISABLED。默认NORMAL
wraplength指定每行文本的宽度,单位是屏幕单元
underline划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为时,第一个字符带下划线,为1时,第二个字符带下划线,以此类推

Entry(根对象,[属性列表])

参数注释
bg背景色
fg前景色
font字体(样式,大小)
width文本框宽度
bd边框宽度
show输入显示方式
textvariable关联一个 Tkinter variable 对象, 通常为 StringVar 对象. 控件文本将在该对象改变时跟着改变

Text(根对象,[属性列表])

参数注释
bg背景色
fg前景色
font字体(样式,大小)
width文本框宽度
bd边框宽度
height文本框高度

Frame(根对象,[属性列表])

参数注释
bg背景色
bd边框宽度
relief三维效果
width框架宽度

Menu(根对象,[属性列表])

参数注释
bg背景色
fg前景色
font字体(样式,大小)
width文本框宽度
bd边框宽度
height文本框高度
方法注释
add_cascade添加子选项
add_command添加命令(label参数为显示内容)
add_separator添加分隔线
add_checkbutton添加确认按钮

Canvas(根对象,[属性列表])

参数注释
bd边框宽度
bg背景色 (画布颜色)
cursor鼠标移动到框架时,光标的形状(参数值:arrow, circle, cross, plus 等)
relief三维效果(参数值:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT)
width画布宽度
height画布高度
形状方法
扇形coord = 10, 50, 240, 210 _.create_arc(coord, start=0, extent=150, fill=“blue”)
线条对象.create_line(x0, y0, x1, y1, …, xn, yn, options)
对象.create_oval(x0, y0, x1, y1, options)
至少有三个顶点的多边形对象.create_polygon(x0, y0, x1, y1,…xn, yn, options)
图像filename = PhotoImage(file = “E:\\sunshine.gif”) _.create_image(50, 50, anchor=NE, image=filename)

弹窗messagebox

采用 from tkinter import messagebox导入messagebox模块

种类方法备注
消息提示框messagebox.showinfo(‘弹窗名称’,'弹窗内容 ')
消息警告框messagebox.showwarning(‘弹窗名称’,'弹窗内容 ')
错误消息框messagebox.showerror(‘弹窗名称’,'弹窗内容 ’ )
对话框messagebox.askokcancel(‘弹窗名称’, '弹窗内容 ')确定/取消,返回值true/false
对话框messagebox.askquestion (‘弹窗名称’, '弹窗内容 ')是/否,返回值yes/no
对话框messagebox.askyesno (‘弹窗名称’,'弹窗内容 ')是/否, 返回值true/false
对话框messagebox.askretrycancel (‘弹窗名称’,'弹窗内容 ')重试/取消,返回值true/false
Last modification:December 2, 2024
If you think my article is useful to you, please feel free to appreciate