Python图形用户界面-Tkinter

来源:互联网 发布:怎么用c语言玩单片机 编辑:程序博客网 时间:2024/06/05 09:45

Tkinter是什么

python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多一个直观的功能,如何想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。

Label(标签)&Button(按钮)

Label

import tkinter as tk#第1步,建立窗口windowwindow=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是窗口文件的关键的关键的关键。

@数据分析-jacky
@数据分析-jacky

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=Falsedef 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步,定义buttondef 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步,定义Textt=tk.Text(window,height=2)t.pack()window.mainloop

jacky

提示: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

jacky

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=0c2=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就是northwestcanvas.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=0def do_job():    global counter    l.config(text='do'+str(counter))    counter+=1   #每次点击,都加1#建立menubarmenubar=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()