Tkinter是什么
python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多一个直观的功能,如何想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。
Label(标签)&Button(按钮)
Label
import tkinter as tk
#第1步,建立窗口window
window=tk.Tk()
#第2步,给窗口的可视化起名字
window.title(\'zhuyuanlu-jacky\')
#第3步,设定窗口的大小(长*宽)
window.geometry(\'500x300\') #这里的乘是小
#第4步,在图形界面上设定标签
l=tk.Label(window,text=\'sum funds\',bg=\'green\',font=(\'Arial,12\'),width=30,height=2)
#说明: bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
#第5步,安置标签
l.pack()
#安置lable的方法有:1)l.pack();2)l.place();
#第6步,
window.mainloop
特别注意,上面部分的理解的难点在第6步,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
所以的窗口文件都必须有类似的mainloop
mainloop是窗口文件的关键的关键的关键。
Button(按钮)
继续上面的代码,开始给window加上Button,
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'500x300\')
l=tk.Label(window,text=\'sum funds\',bg=\'green\',font=(\'Arial,12\'),width=30,height=2)
l.pack()
#第7步,添加按钮
b=tk.Botton(window,text="hit me",width=15,height=2,command=hit_me)
#command参数为按钮执行的函数方程,下一步还要定义hit_me 这个函数
window.mainloop
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'500x300\')
#第9步,假设变量
var=tk.StringVar() #这是tk里字符串的变量
#第10步,因为字符串变量是在标签里显示的,所以要给改l的代码
#l=tk.Label(window,text=\'sum funds\',bg=\'green\',font(\'Arial,12\'),width=30,height=2)更改成:
l=tk.Label(window.textvariable=var,bg=\'green\',font(\'Arial,12\'),width=30,height=2)
l.pack()
#第8步,定义hit_me函数
#我们要实现的功能是点击按钮,label从无内容点击后显示出 sum money
#为了点击前后sum money从无到有,我们需要一个变量来代替,所以def hit_me():我们先到第9步,在回到第8步
def hit_me():
b=tk.Botton(window,text="hit me",width=15,height=2,command=hit_me)
window.mainloop
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'500x300\')
var=tk.StringVar()
l=tk.Label(window.textvariable=var,bg=\'green\',font(\'Arial,12\'),width=30,height=2)
l.pack()
#第11步,设定全局变量显示还是不显示
on_hit=False
#第12步,回到第8步,定义hit_me函数
def hit_me():
global on_hit
if on_hit==False:
var.set(\'you hit me\')
else:
var.set(\'\')
b=tk.Botton(window,text="hit me",width=15,height=2,command=hit_me)
window.mainloop
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'500x300\')
var=tk.StringVar()
l=tk.Label(window.textvariable=var,bg=\'green\',font(\'Arial,12\'),width=30,height=2)
l.pack()
on_hit=False
def hit_me():
global on_hit
if on_hit==False:
on_hit=True #第13步
var.set(\'you hit me\')
else:
on_hit=False #第14步
var.set(\'\')
b=tk.Botton(window,text="hit me",width=15,height=2,command=hit_me)
#第15步
b.pack() #把button放在label下面的位置
window.mainloop
上面完成了一个简单的窗口
Entry(输入)&Text(文本框)
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
#Entry(输入)
#第1步
e=tk.Entry(window,show=None)
#比如像密码那样输入:show=\'*\'
#第2步,把Entry放在window上面
e.pack()
#第3步,定义button
def insert_point():
var=e.get()
t.insert(\'insert\',var)
def insert_end():
var=e.get()
t.insert(\'end\',var)
b1=tk.Button(window,text="insert point",width=15,height=2,command=insert_point)
b1.pack() #把button放在label下面的位置
b2=tk.Button(window,text="insert end",command=insert_end)
b2.pack()
#第4步,定义Text
t=tk.Text(window,height=2)
t.pack()
window.mainloop
提示:def insert_end():
var=e.get()
t.insert(1.1,var) 就是插入了一行一列上
列表控件(Listbox)
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
var1=tk.StringVar()
l=tk.Label(window,bg=\'yellow\',width=4,textvariable=var1)
l.pack()
#光标在listbox上,把内容显示到label上
def print_selection():
value=lb.get(lb.curselection()) #先要获得光标中我要显示的值
var1.set(value) #再把值附在label当中
b1=tk.Button(window,text="print selection",width=15,height=2,command=print_selection)
b1.pack()
var2=tk.StringVar()
var2.set((11,22,jacky,haerbin))
lb=tk.Listbox(window,listvar=var2)
#如何插入元素进列表
list_items=[aa,bb,cc] #先定义它是个列表
for item in list_items:
lb.insert(\'end\',item)
lb.insert(1,\'first\') #也可以按照索引插入
lb.pack()
window.mainloop
Radiobutton(选择按钮)
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
var=tk.StringVar()
l=tk.Label(window,bg=\'yellow\',width=20,text=\'empty\')
l.pack()
def print_selection():
l.config(text=\'you have selected\'+var.get()) #config可以改变label的参数
#text参数为显示在选择按钮上为Option A, 当选择Option A的时候,把var赋值成value参数A,
r1=tk.Radiobutton(window,text=\'Option A\',variable=var,value=\'A\',command=print_selection)
r1.pack()
r2=tk.Radiobutton(window,text=\'Option B\',variable=var,value=\'B\',command=print_selection)
r2.pack()
r3=tk.Radiobutton(window,text=\'Option C\',variable=var,value=\'C\',command=print_selection)
r3.pack()
window.mainloop
Checkbutton(勾选项)
Checkbutton与Radiobutton区别:
Radiobutton只能选定所有Radiobutton中的一个值
Checkbutton可以选择打勾的很多值
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
l=tk.Label(window,bg=\'yellow\',width=20,text=\'empty\')
l.pack()
def print_selection():
if(var1.get()==1)&(var2.get()==0):
l.config(text=\'fund_one month\')
elif(var1.get()==0)&(var2.get()==1):
l.config(text=\'fund_three month\')
elif(var1.get()==0)&(var2.get()==0):
l.config(text=\'\')
else:
l.config(text=\'sum funds\')
var1=tk.IntVar()
var2=tk.IntVar()
c1=tk.Checkbutton(window,text=\'one month\',variable=var1,onvalue=1,command=print_selection)
#选定就是打开onvalue,不选定offvalue=0
c2=tk.Checkbutton(window,text=\'three month\',variable=var2,onvalue=1,command=print_selection)
c1.pack()
c2.pack()
window.mainloop
Canvas画布
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
#创建画布
canvas=tk.Canvas(window,bg=\'blue\',height=100,width=200)
#加载图片的文件
image_file=tk.PhotoImage(file=\'***.gif\') #这里特别注意,有些版本只支持gif图片
image=canvas.creat_image(0,0,anchor=\'nw\',image_file) #图片放的点位,nw就是northwest
canvas.pack()
b=tk.Butthon(window,text=\'move\',command=moveit).pack()
window.mainloop
Menubar 菜单
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
l=tk.Label(window,text=\'\',bg=\'yellow\')
l.pack()
#定义菜单栏下New的命令
counter=0
def do_job():
global counter
l.config(text=\'do\'+str(counter))
counter+=1 #每次点击,都加1
#建立menubar
menubar=tk.Menu(window)
#创建menubar的选项
filemenu=tk.Menu(menubar,tearoff=0) #tearoff=1或0是定义menu能不能被分开
menubar.add_cascade(label=\'File\',menu=filemenu)
filemenu.add_command(label=\'New\',command=do_job) #file文件栏下的每一个选项就相当于一个命令
filemenu.add_command(label=\'Open\',command=do_job)
filemenu.add_command(label=\'Save\',command=do_job)
#加进分隔线
filemenu.add_separator()
filemenu.add_command(label=\'Exit\',command=window.quit)
#创建Edit菜单栏
editmenu=tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label=\'Edit\',menu=editmenu)
editmenu.add_command(label=\'Cut\',command=do_job)
editmenu.add_command(label=\'Copy\',command=do_job)
editmenu.add_command(label=\'Paste\',command=do_job)
#把所有的menu放在window上
window.config(menu=menubar)
window.mainloop()
放置位置
place
import tkinter as tk
window=tk.Tk()
window.title(\'zhuyuanlu-jacky\')
window.geometry(\'300x300\')
l=tk.Label(window,text=\'\',bg=\'yellow\').place(x=10,y=100,anchor=\'nw\')
window.mainloop()