目录
一.tkinter库介绍
二.功能实现
1.窗口创建
2.Button 按钮
3.Entry 文本输入域
4.text 文本框
5.Listbox 多选下拉框
8.Scale 滑块(拉动条)
9.Scroolbar 滚动条
10.Menu 菜单栏
11. messagebox 消息框
12.布局
一.tkinter库介绍
tkinter是python进行窗口视窗设计的模块,是python中一个比较简单的GUI编程库,对于大多数python学习者来说,tkinter还是挺容易上手的,而且tkinter还是python自带的库,无需下载就可以直接使用。python的GUI编程和java的GUL编程很相似,这里推荐:JAVA GUI编程
这里主要介绍tkinter几个功能部件,掌握之后自己编写一个GUI程序不成问题:
- Button 按钮功能模块
- Canv 画布,提供画图功能
- Checkbutton 复选框
- Entry 单行文本框
- Frame 框架,放置其他GUI元素的容器
- Labe 标签,用于显示文本或图片
- Listbox 列表框
- Menu 菜单项,提供选择项给用户选择
- Menubutton 菜单按钮,包含菜单的组件
- optionMenu 选择菜单
- Message 消息框
- Radiobutton 单选框
- Scale 进度条
- Scroollbar 滚动条
- Text 文本
messageBox 消息框
二.功能实现
1.窗口创建
窗口的创建包括导入tkinter库,定义窗口标题(title)和窗口大小(geometry),最后通过窗口循环显示mainloop()显示出来,例如:
import tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
# 循环显示
window.mainloop()
窗口:
2.Button 按钮
窗口我们已经创建了,现在我们来创建一个Button按钮,创建格式:
tk.Button(window_name,text='',command='回调功能')
例如:
import tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
# 按钮
bt=tk.Button(window,text='确定',bg='green')
bt.pack() # 窗口加载
# 循环显示
window.mainloop()
显示一个绿色按钮
3.Entry 文本输入域
格式:
tk.Entry(window_name,show=' ',font=('字体,大小 ')
其中show表示输入后的文本显示内容,如果show=‘*’,输入密文,不定义show表示明文输出
例如:
mport tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
entry=tk.Entry(window,font=('微软黑体',20))
entry1=tk.Entry(window,show='*',font=('微软黑体',20))
entry2=tk.Entry(window,show='@',font=('微软黑体',20))
entry.pack()
entry1.pack()
entry2.pack()
# 循环显示
window.mainloop()
效果:
4.text 文本框
text文本框和Entry都可以输入文本,只不过text是多行文本框,支持输入多行文本,而Entry是单行文本
格式:
tk.Text(window_name,height)
例如:
import tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
text=tk.Text(window,height=3)
text.pack()
# 循环显示
window.mainloop()
5.Listbox 多选下拉框
Listbox以下拉的方式通过多选框,格式:
tk.Listbox(window_name,listvable)
例如:
import tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
label=tk.Label(window,text='请选择:')
ver=tk.StringVar()
ver.set(('杨幂','刘亦菲','林志玲'))
lsitbox=tk.Listbox(window,listvariable=ver,height=4)
label.pack()
lsitbox.pack()
# 循环显示
window.mainloop()
6.Radiobutton 多选项按钮
多选按钮定义格式:
tk.radiobutton(window_name,text,variable,value,command)
例如:
import tkinter as tk
window=tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
label=tk.Label(window,text='请选择:')
var=tk.StringVar()
# 定义函数触发功能:
def select():
label.config(text='你是一位'+var.get()+'强者!')
# command回调selec()函数,value和variable表示函数触发后将value的值给variable
rdiobutton=tk.Radiobutton(window,text='选项1',variable=var,value='斗皇',command=select)
rdiobutton1=tk.Radiobutton(window,text='选项2',variable=var,value='斗王',command=select)
rdiobutton2=tk.Radiobutton(window,text='选项3',variable=var,value='斗宗',command=select)
label.pack()
rdiobutton.pack()
rdiobutton1.pack()
rdiobutton2.pack()
# 循环显示
window.mainloop()
初始效果:
选择一个多选按钮后:
7.Checkbutton 多选按钮
checkbutton多选按钮比Radiobutton按钮高级,可以选择多个按钮,而后者只能选择一个,格式:
tk.Checkbutton=(window_name,text,variable,onvalue,offvalue,command)
例如:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
label = tk.Label(window, text='请选择:')
var = tk.StringVar()
# 定义函数触发功能:
def select():
label.config(text='你是一位' + var.get() + '强者!')
# command回调selec()函数,value和variable表示函数触发后将value的值给variable
rdiobutton = tk.Radiobutton(window, text='选项1', variable=var, value='斗皇', command=select)
rdiobutton1 = tk.Radiobutton(window, text='选项2', variable=var, value='斗王', command=select)
rdiobutton2 = tk.Radiobutton(window, text='选项3', variable=var, value='斗宗', command=select)
label.pack()
rdiobutton.pack()
rdiobutton1.pack()
rdiobutton2.pack()
label1 = tk.Label(window, text='可以多选', bg='green',width=20)
label1.pack()
var1 = tk.IntVar()
var2 = tk.IntVar()
def option():
if (var1.get() == 1) & (var2.get() == 0):
label1.config(text='我爱数学!')
elif (var1.get() == 0) & (var2.get() == 1):
label1.config(text='我爱计算机')
elif (var1.get() == 0) & (var2.get() == 0):
label1.config(text='什么都不喜欢还学什么编程?')
else:
label1.config(text='未来可期!')
# checkbutton参数和radiobutton参数差不多,onvalue表示选中,offvalue表示选不中,然后把值给variable
checkbutton = tk.Checkbutton(window, text='数学', variable=var1, onvalue=1, offvalue=0, command=option)
checkbutton1 = tk.Checkbutton(window, text='计算机', variable=var2, onvalue=1, offvalue=0, command=option)
checkbutton.pack()
checkbutton1.pack()
# 循环显示
window.mainloop()
初始:
选择效果:
祝大家未来可期!
8.Scale 滑块(拉动条)
Scale滑块就像调节电脑音量大小的滑块一样,如果要定义滑块,需要知道这几个参数:
- from_ 滑块起始位置
- to 结束位置
- lenght 长度
- showvalue 是否显示数值
- tickinterval 刻度单位
- orient 滑动方向,orient=tk.HORIZONTAL表示水平滑动
- lable lable标签,起提示作用
- resolution 精度
格式:
tk.Scale(window_name,label,from_,to,height,orient,showvalue,tickinterval,resolution)
例如:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
lable=tk.Label(text='音量')
lable.pack()
scale=tk.Scale(window,label='垂直音量调节',from_=0,to=100,
tickinterval=10,showvalue=True,length=150,resolution=0.01,orient=tkinter.VERTICAL)
scale1=tk.Scale(window,label='水平音量调节',from_=0,to=100,
tickinterval=10,showvalue=True,length=200,resolution=0.01,orient=tkinter.HORIZONTAL)
scale.pack()
scale1.pack()
# 循环显示
window.mainloop()
效果:
9.Scroolbar 滚动条
滚动条要设置的两个步骤:
(1)设置要带有滑动条的标签的yscrollbarcommand为Scrooblbar.set()
(2)设置Scroolbar组件的command为要带滑动条标签的yview()
例如:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
scrollbar=tk.Scrollbar(window)
text=tk.Text(window,yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
# scrollbar.pack(side='left',fill='y')
scrollbar.pack(side='right',fill='y')
text.pack(side='left')
# 循环显示
window.mainloop()
10.Menu 菜单栏
菜单栏创建:
(1)在窗口创建菜单项
menu_name=tk.Menu(window_name)
file_menu=tk.Menu(menu_name,tearoff=True/False)
(2)设置菜单栏选项
menu_name.add_cascade(label,file_menu)
(3)菜单栏选项添加内容
file_menu.add_command(label)
(3)窗口加载菜单栏
window.confing(menu=men_name)
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
menubar=tk.Menu(window)
filemeun=tk.Menu(menubar,tearoff=True)
menubar.add_cascade(label='设置',menu=filemeun)
filemeun.add_command(label='时间')
filemeun.add_command(label='语言')
filemeun.add_separator() # 分隔线
filemeun.add_command(label='大小')
filemeun1=tk.Menu(menubar,tearoff=False)
menubar.add_cascade(label='编辑',menu=filemeun1)
filemeun2=tk.Menu(menubar,tearoff=False)
menubar.add_cascade(label='运行',menu=filemeun2)
window.config(menu=menubar)
# 循环显示
window.mainloop()
11. messagebox 消息框
messagebox使用首先要导入模块:import tkinter.messagebox,使用格式:
tkinter.messagebox.消息类型(title='',message='')
部分消息类型如下:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
import tkinter.messagebox
tkinter.messagebox.showinfo(title='消息',message='hello world!hello time!')
tkinter.messagebox.showwarning(title='警告',message='警告!时间已不多')
tkinter.messagebox.showerror(title='错误',message='编译错误')
tkinter.messagebox.askquestion(title='问题',message='还有什么问题吗')
tkinter.messagebox.askyesno(title='选择',message='是否继续学习')
tkinter.messagebox.askokcancel(title='取消',message='是否取消会议?')
# 循环显示
window.mainloop()
12.布局
这里的布局有grid方格布局,pack方位布局和place自定义布局
grid方格布局:
grid(row,column,padx,pady,ipadx,ipady)
其中row和column分别表示行和列,padx和pady分别表示单元格上下间距和左右间距,ipadx和ipady分别表示单元格内元素的左右间距和上下间距
例如:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
for i in range(3):
for j in range(3):
tk.Label(window,text='@').grid(row=i,column=j,padx=10,pady=10,ipadx=10,ipady=10)
# 循环显示
window.mainloop()
pack方位布局:
pack我们之前写代码一直在用,它主要原来设置标签的位置,它的参数有:top,bottom,left,right
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
label_top=tk.Label(text='上')
label_bottom=tk.Label(text='下')
label_left=tk.Label(text='左')
label_right=tk.Label(text='右')
label_top.pack(side='top')
label_bottom.pack(side='bottom')
label_left.pack(side='left')
label_right.pack(side='right')
# 循环显示
window.mainloop()
place 自定义布局
格式:
place(x,y,anchor)
其中anchor表示锚点,各个方位的锚点如下:
例如:
import tkinter as tk
window = tk.Tk()
# 标题
window.title('hello world')
# 大小
window.geometry('500x300')
tk.Label(window,text='NW').place(x=400,y=200,anchor='nw')
# 循环显示
window.mainloop()