• Python图形用户界面-Tkinter


    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是窗口文件的关键的关键的关键。

    @数据分析-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=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

    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=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()
  • 相关阅读:
    synthetic-load-generator 一个不错的opentracing trace && metrics && logs 生成工具
    记一次php.ini配置不合理造成系统加载偏慢问题
    Data-Prepper opendistro 开源的基于es 的trace 分析工具
    使用babel-standalone 让浏览器支持es6特性
    tempo grafana 团队开源的分布式追踪框架
    grafana/agent grafana 团队开源的兼容prometheus 的agent
    k6 集成goja 的部分集成说明
    spf13/afero 通用文件系统试用
    goja 支持es6的一种方法
    salesforce 跨组织数据可见性的方案
  • 原文地址:https://www.cnblogs.com/shujufenxi/p/7786589.html
Copyright © 2020-2023  润新知