初识Tkinter:一些必须掌握的基础知识

本文介绍了Python的Tkinter库,它是Python自带的GUI库,无需安装即可使用。文章讲解了Tkinter的基础知识,包括控件(如Label、Button、Entry、Text)、属性、布局管理(pack、grid、place),并通过实例展示了如何创建主窗口、设置标签、按钮、输入框和文本组件。此外,还提到了Tkinter提供的对话框模块,如messagebox、filedialog、colorchooser和simpledialog的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9f3028e109d7eb15cf4276041bb8b464.gif

Hi,我是山月。

自学Python一年后,我有这些想说里,山月提到了可视化界面,其实它有一个专业的名称:图形用户界面(Graphical User Interface,简称 GUI)。

在Python里,提供了很多个GUI库,比如:Tkinter,PyQt,PySimpleGUI,EasyGUI,PyGUI...

在结合功能和简易程度后,山月选择的是Tkinter。

所以今天就来给大家介绍一下Tkinter的基本知识,在未来山月也会基于tkinter分享一些实战项目。

Tkinter官网:https://docs.python.org/3/library/tkinter.html。

1、安装

Tkinter是Python 自带的库,不需要安装即可直接使用。

我们可以在编辑器(本文使用的是vscode)里输入import tkinter,然后运行,如果没有报错则表示成功安装。

20dd9384c1b57e164dbddc6e045ed59d.png

如果报错,重新安装python并注意勾选tk选项即可:

92341e88781bdc69a66634d2432468f3.png

2、基础知识介绍

2.1 控件

Tkinter里提供了多种控件,如按钮、标签和文本框等,一些常用的控件介绍如下图:

58f73644db61ba3d48da54fee2ab6998.png

图片来源:https://www.cnblogs.com/shwee/p/9427975.html

基本用法:

控件对象 = 控件( master, option=value, ... )

如Label控件:
sy_label = Label( master, option=value, ... )

其中:

  • master:在哪个窗口显示,例如主窗口。

  • options:可选项,即该按钮的可设置的属性。这些选项可以用属性=属性值的形式设置,并以逗号分隔。

由于篇幅原因,山月只会在后文以几个基础组件:Button、Entry、Label、Text为例,带大家了解一下控件的使用。

如果大家对其它组件有兴趣或者需求的话,可以去官网查看或者在百度上直接搜索,比如想学Toplevel组件:

156d6b403486d33e12a9ae50770961d3.png

2.2 属性

每个组件都有很多属性,其中有些属性是特有的,有些属性是控件的共同属性,如字体和颜色等等。

一些常见的属性如下:

ab0aaf0e343cd08456b06761b7243d68.png

2.3 布局

Tkinter有三种布局方式:pack、grid、place,这三种布局就我个人的使用感觉来说,place更加灵活,因此我一般是用place居多。

不过在本文里,由于没有排版需求,因此我是使用的pack作为布局方式。

注意不要在一个主窗口中混合使用布局方式。

3、Tkinter主窗口创建

代码:

import tkinter #导入模块
windows = tkinter.Tk() #实例化一个窗体对象
windows.title("是山月呀") #设置窗口标题
windows.geometry('600x500+125+70') #设置窗口尺寸:窗口长*宽+左上点离屏幕左边界距离+左上点离屏幕上边界距离
windows.mainloop() # 进入消息循环,显示窗体

效果:

20d140cda3d30a909fc5ef10cc693ae7.png

4、 Label(标签)组件

Label(标签)组件可以用来显示文本或图像。

用法示例:

import tkinter
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

sy_label = tkinter.Label(windows, width=20, height=2, bg ="black", fg ="red", text="和山月学Python", font=('微软雅黑',12)) #在图形界面上设定标签
sy_label.pack() #放置标签

windows.mainloop()

结果:

c3853ed3555a7552f75ceda773f234d7.png

说明:如果我们把这个代码和之前创建主窗口的代码进行对比的话,会发现代码多了6-7行的内容。

而结果也比主窗口多了行黑背景红颜色的文字,这行多出来的文字就是我们设置的标签。

其中第6行的内容:

sy_label = tkinter.Label(windows, width=20, height=2, bg ="black", fg ="red", text="和山月学Python", font=('微软雅黑',12))

是设定一个宽20,高2,背景色为黑色,文字颜色为红色的放在windows主窗口的标签,标签的内容为文字:和山月学Python。

第7行的内容:

sy_label.pack()

是用pack布局方法放置设定好的标签,由于pack没有指定属性,会自动调节放置。

如果想用Label显示图片的话,需要注意:

Tkinter自带的PhotoImage模块只能识别png和gif图像,想要显示其他格式的图片,需要借助PIL库进行格式转换

5、Button(按钮)组件

Button(按钮)组件用于在窗口里添加按钮,按钮上可以放上文本或图像,也能够与 Python 函数进行关联,当按钮被按下时自动调用该函数。

用法示例:

import tkinter
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

#定义一个函数,供点击Button按键时调用
def sy_show():
    print("哎呀,你点击了按钮")

# 在窗口界面设置并放置Button按键
sy_button = tkinter.Button(windows, text="按一下", font=('微软雅黑',12),command=sy_show)
sy_button.pack()

windows.mainloop()

效果:

251a29512c876de02932f8a739fb76ad.gif

我们重点看6-12行的代码内容,这些代码可以分为两部分:

一是sy_show函数的定义,这个函数的作用是打印文字:哎呀,你点击了按钮。

二是设置和放置button按钮,并且这个按钮利用调用命令参数【command=sy_show】和sy_show函数进行了关联。

因此可以看到:当我们点击按钮的时候,会直接打印出:哎呀,你点击了按钮。

6、Entry组件

Entry(输入框)组件可以使用户输入显示单行文本。

用法示例:

import tkinter
from tkinter.constants import NONE
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')


sy_label_1 = tkinter.Label(windows, text="账户:")
sy_label_1.pack()

sy_entry_1 = tkinter.Entry(windows)
sy_entry_1.pack()


sy_label_2 = tkinter.Label(windows, text="密码:")
sy_label_2.pack()

sy_entry_2 = tkinter.Entry(windows, show='*') # 显示成密文形式
sy_entry_2.pack()

windows.mainloop()

效果:

161ba5ac094ec1192b201e8631040911.gif

我们重点看8-19行的代码,这段代码设置并摆放了两个按钮组件和两个Entry输入框组件。

其中对于sy_entry_2输入框,属性show的属性值设置了:'*',也就是以密文形式表现,所以在这个输入框输入的文字会以 * 代替。

ps:如果属性show的属性值设置了:'None',则是明文形式表现,大家有兴趣可以去试一下。

不知道有没有小伙伴get了Entry组件的作用。

7、Text组件

Text(文本)组件用于显示和处理多行文本。

7.1 常用函数

1)insert:插入Text文本。

Text控件对象默认是没有任何内容的,需要用到insert函数让它显示文字。

insert(index, text):在 index 参数指定的位置插入字符串。

其中index的用法是'行数.列数',比如index='1.0',表示插入的位置在第1行第0个字符处,也就是行首。

说明:由于历史惯例,行号从1开始计数,字符编号从0开始计数。

2)delete:删除Text文本。

delete(index1, index2):index1包含,index2不包含,也就是删除[index1,index2)之间的字符。

3)get:查找Text文本。

get(index1, index2):index1包含,index2不包含,也就是查找[index1,index2)之间的字符。

7.2 用法示例

代码:

import tkinter
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

#设置并放在Text组件
sy_text = tkinter.Text(windows, height=3)
sy_text.pack()

#插入【用insert函数插入文字】到组件并获取组件内容
sy_text.insert('1.0', '用insert函数插入文字') #插入内容
sy_results_1 = sy_text.get('1.0', '1.end') #获取内容
print(sy_results_1)

#删除文字['1.0','1.3')之间的字符,并再次获取组件内容
sy_text.delete('1.0', '1.3') #删除内容
sy_results_2 = sy_text.get('1.0', '1.end')
print(sy_results_2)

windows.mainloop()

结果:

74c35189424d2e84e5d699adb3e320cb.png

终端显示:

 用insert函数插入文字
 sert函数插入文字

8、对话框模块

Tkinter提供了四个弹出式对话框模块,可以用来创建弹出对话框:

  • messagebox:消息对话框。

  • filedialog:文件选择对话框。

  • colorchooser:颜色选择对话框。

  • simpledialog:输入对话框。

在使用这些模块之前,我们需要把这些模块导入,当然我们可以选择同时导入四个模块,导入方法:

#单独导入模块,比如导入messagebox模块
from tkinter import messagebox

#同时导入四个
from tkinter import messagebox, filedialog, simpledialog, colorchooser

8.1 消息对话框messagebox

代码:

import tkinter
from tkinter import messagebox
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

def info_file():
    tkinter.messagebox.showinfo("消息框标题", "恭喜你学会啦~")

info_button = tkinter.Button(windows, text='提示消息框', command=info_file)
info_button.pack(pady=10)


def warning_file():
    tkinter.messagebox.showwarning("消息框标题","警告内容")

warning_button = tkinter.Button(windows, text='消息警告框', command=warning_file)
warning_button.pack(pady=10)


def error_file():
    tkinter.messagebox.showerror("消息框标题","错误提示内容")

error_button = tkinter.Button(windows, text='错误消息框', command=error_file)
error_button.pack(pady=10)


def askquestion_file():
    tkinter.messagebox.askquestion("消息框标题","提示内容")

askquestion_button = tkinter.Button(windows, text='询问确认对话框', command=askquestion_file)
askquestion_button.pack(pady=10)


windows.mainloop()

效果:

64168135964da085e9d8791d55d0e0bd.gif

8.2  文件选择对话框filedialog

代码:

import tkinter
from tkinter import filedialog
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

def sy_file():
    tkinter.filedialog.askopenfilename(title='选择图片',filetypes=[("JPG",".jpg"), ("GIF",".gif"), ('All Files', '*')])

info_button = tkinter.Button(windows, text='选择图片', command=sy_file)
info_button.pack(pady=10)


def sy_filename():
    tkinter.filedialog.askdirectory(title='选择文件夹')

warning_button = tkinter.Button(windows, text='选择文件夹', command=sy_filename)
warning_button.pack(pady=10)



windows.mainloop()

效果:

54593ec344fa06a166fc446d6497df8a.gif

8.3 颜色选择对话框colorchooser

代码:

import tkinter
from tkinter import colorchooser
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

def sy_choose():
    choose_sy = tkinter.colorchooser.askcolor(title='颜色选择')
    print(choose_sy)

choose_button = tkinter.Button(windows, text='选择颜色', command=sy_choose)
choose_button.pack()


windows.mainloop()

效果:

a7e29840f03e73fceddbea77c06f73e3.gif

8.4 输入对话框simpledialog

代码:

import tkinter
from tkinter import simpledialog
windows = tkinter.Tk()
windows.title("是山月呀")
windows.geometry('600x500+125+70')

def sy_int():
    ask1 = simpledialog.askinteger("猜整数", "输入整数:",initialvalue=18, minvalue=0, maxvalue=60)
    print(ask1)

int_button = tkinter.Button(windows, text='输入整数', command=sy_int)
int_button.pack(pady=10)


def sy_float():
    ask2 = simpledialog.askfloat("浮点数", "输入浮点数:",initialvalue=48.5, minvalue=0, maxvalue=100)
    print(ask2)

float_button = tkinter.Button(windows, text='输入浮点数', command=sy_float)
float_button.pack(pady=10)

def sy_str():
    ask3 = simpledialog.askstring("字符串", "输入字符串:",initialvalue='山月')
    print(ask3)

str_button = tkinter.Button(windows, text='输入字符串', command=sy_str)
str_button.pack(pady=10)

windows.mainloop()

效果:

0b043de779d02b3f58676847f97577a9.gif

好啦,tkinter基础知识就到这~希望对大家有帮助。

另外,不同电脑可能配置环境略有不同,如果有小错误可以自己试着去解决一下哦~

已经到底啦~(≧▽≦*)/~

/ /   推荐阅读   / /

自学Python一年后,我有这些想说

2021-12-04

a62efacd8bd3ff55707eaeefaf78bf66.png

建议收藏:68个Python内置函数详解

2021-12-05

dc897ce667ef9c5b748275964aeb77d7.png

哦,你也在这里吗?

2021-09-21

7b91610af7d082f15d533b7c83d4c8b2.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值