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,然后运行,如果没有报错则表示成功安装。
如果报错,重新安装python并注意勾选tk选项即可:
2、基础知识介绍
2.1 控件
Tkinter里提供了多种控件,如按钮、标签和文本框等,一些常用的控件介绍如下图:
图片来源: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组件:
2.2 属性
每个组件都有很多属性,其中有些属性是特有的,有些属性是控件的共同属性,如字体和颜色等等。
一些常见的属性如下:
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() # 进入消息循环,显示窗体
效果:
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()
结果:
说明:如果我们把这个代码和之前创建主窗口的代码进行对比的话,会发现代码多了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()
效果:
我们重点看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()
效果:
我们重点看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()
结果:
终端显示:
用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()
效果:
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()
效果:
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()
效果:
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()
效果:
好啦,tkinter基础知识就到这~希望对大家有帮助。
另外,不同电脑可能配置环境略有不同,如果有小错误可以自己试着去解决一下哦~
已经到底啦~(≧▽≦*)/~
/ / 推荐阅读 / /


