tkinter 订阅
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口. [1]  Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以通过ttk实现本地窗口风格,并良好地运行在绝大多数平台中. [1-2]  此外,tkinter.tix提供了更丰富的窗口组件。 [3] 展开全文
Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口. [1]  Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以通过ttk实现本地窗口风格,并良好地运行在绝大多数平台中. [1-2]  此外,tkinter.tix提供了更丰富的窗口组件。 [3]
信息
附加模块
Python模块
模    块
Tk 接口
tkinter.ttk
Python_tkinter附加模块(Ttk)
使用平台
Unix、Windows
中文名
Tkinter
Tkinter早期版本
Tkinter包含了若干模块. Tk接口被封装在一个名为 _tkinter 二进制模块里( tkinter 的早期版本). 这个模块包含了Tk的低级接口,因而它不会被程序员直接应用.它通常表现为一个共享库(或DLL文件),但在一些版本中它与Python解释器结合在一起. [1] 
收起全文
精华内容
参与话题
问答
  • Tkinter python3

    多人点赞 2018-11-24 13:45:20
    由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。 创建一个GUI程序 1、导...

    Tkinter

    在这里插入图片描述
    Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

    由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
    注意:python3中的库名为tkinter,即首字母大写。

    创建一个GUI程序

    1、导入 Tkinter 模块
    2、创建控件
    3、指定这个控件的 master, 即这个控件属于哪一个
    4、告诉 GM(geometry manager) 有一个控件产生了。

    Tkinter主体:

    每一个tkinter应用的主体框架都可以包含下面这部分,定义window窗口和window的一些属性,然后书写窗口内容,最后执行window.mainloop让窗口活起来。

    //导入模块
    import tkinter
    // 创建主窗口
    win = tkinter.Tk()
    //设置窗口标题
    win.title(“sunck”)
    //设置窗口大小与位置
    win.geometry(“400x400+200+0”)
    //进入消息循环,程序运行起来
    win.mainloop()

    代码如下:

    #!usr/bin/python3
    #-*- coding: UTF-8 -*-
    
    import tkinter
    
    #创建主窗口
    win=tkinter.Tk()
    #窗口标题
    win.title('哈哈')
    #窗口大小位置
    win.geometry('400x400+200+0')
    #消息循环 程序运行
    win.mainloop()
    

    效果图:
    在这里插入图片描述

    Tkinter 组件

    Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

    常用控件:

    在这里插入图片描述

    所有控件共有属性

    在这里插入图片描述

    常用控件:

    1. label(标签控件),button(按钮控件)

    • Label控件用于显示文字和图片
    • Label通常被用来展示信息,而非与用户进行交互
    • Label也可以绑定点击等事件,只是通常不这么用

    label,button完整代码如下:

    import tkinter as tk  
    #创建主窗口
    window=tk.Tk()
    #窗口标题
    window.title('哈哈')
    #窗口大小位置
    window.geometry('400x400')
    #这是文字变量存储器
    var = tk.StringVar()
    #创建标签控件
    l = tk.Label(window,
    #标签的文本
        # text='omg,this is label',
        # 使用 textvariable 替换 text, 因为这个可以变化
        textvariable=var, 
        bg='red',
        font=('Arial',12),
        #标签宽高
        width=15,
        height=2,
        #瞄点,标签里的文本在标签里面显示的位置
        anchor='n',
        #显示多行文本的时候,设置不同行之间的对齐方式
        justify='center',
        #下划线  第5个字符带下划线
        underline=4,
        #设置边框样式
        relief='flat',
        )
    #显示控件
    l.pack()
    # 默认初始状态为 False
    on_hit = False  
    def hit_me():
        global on_hit
        # 从 False 状态变成 True 状态
        if on_hit == False:    
            on_hit = True
            # 设置标签的文字为 'you hit me'
            var.set('you hit me')   
        else: 
        # 从 True 状态变成 False 状态     
            on_hit = False
            # 设置文字为空
            var.set('') 
            #点击按钮,点击之后才会执行相关函数
    b = tk.Button(window,
    # 显示在按钮上的文字 
        text='hit me',     
        width=15, height=2, 
       
        #设置控件边框的大小 默认2像素
        bd=3,
        #边框样式
        relief='sunken',
        #当鼠标放上去时,按钮的背景颜色
        activebackground='orange',
        #当鼠标放上去时,按钮的文本颜色
        activeforeground='green',
        # 点击按钮时执行一次命令
        command=hit_me,    
        )
    # 按钮位置
    b.pack()
    #消息循环 程序运行
    window.mainloop()
    

    显示效果:

    在这里插入图片描述

    部分属性介绍:

    • anchor:文本在空间中的显示位置(按照上北下南,左西右东规则),可选值有(n北 e东 s南 w西 center剧中 ne西北 se东南 sw西南 nw东北)方向

    • imag:显示的图片

    • acticvebackground:当鼠标放上去的时候,按钮的背景色

    • activeforeground:当鼠标放上去时,按钮的文本颜色

    • highlightcolor:要亮的颜色

    • image:按钮上要显示的图片

    • state:设置按钮组件状态,可选的有(normal(默认),active,disabled)

    • command:按钮的绑定函数方法,接受一个函数名,注意函数名不要加引号

    2.Entry(输入框) ,Text(文本框):

    首先得定义一个Entry控件

    e = tk.Entry(window,show=None)
    e.pack()
    

    注意这里的show,可以自定义显示你想要在Entry中显示的字符,例如像输入密码时,可令show=‘*’
    本节实现的例子功能为,如下所示的一个窗口,从上至下分别为定义的Entry、Button、Button和Text。两个Button分别命名为insert point和insert end,获取Entry中输入的内容并且分别在光标位置、末尾插入,内容显示在Text中。

    Entry,Text完整代码如下:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    #密形式输入 
    e = tk.Entry(window,show='*')
    e.pack()
    def insert_point():
        var = e.get()
        #insert索引表示在光标处插入 insert改为2.4,则表示在文本的第2行第4列插入
        t.insert('insert',var)
    def insert_end():
        var = e.get()
        #end索引表示在最后插入
        t.insert('end',var)
    b1 = tk.Button(window,text='insert point',width=15,
                height=2,command=insert_point)
    b1.pack()
    b2 = tk.Button(window,text='insert end',
                   command=insert_end)
                   b2.pack()
    t = tk.Text(window,height=2)
    t.pack()
    window.mainloop()
    
    

    效果图:

    在这里插入图片描述

    标部分属性介绍:

    • Text文本组件用于显示和处理多行文本
    • 在Tkinter的所有组件中,Text组件显得异常强大和灵活,他适用于处理多任务
    • 当创建一个Text组件的时候里面是没有内容的。为了给其插入数据,可以使用‘
      insert()以及INSERT或END索引号

    3. Listbox 列表部件 :

    本节例子实现功能为:如下所示,从上到下分别为Label、Button和Listbox,Button实现将Listbox中当前光标选中的内容显示在Label中

    完整代码如下:

    import tkinter as tk
    
    window = tk.Tk()
    window.title = 'listhbox'
    window.goemetry='300x300'
    
    var = tk.StringVar()
    l = tk.Label(window,bg='blue',textvariable=var,height=2,width=15)
    l.pack()
    
    def print_selection():
        #获取鼠标选中的值
        value=lb.get(lb.curselection())
        var.set(value)  
        
    b1 = tk.Button(window, text='print selection', width=15,
                  height=2, command=print_selection)
    b1.pack()
    
    var2=tk.StringVar()
    var2.set((11,22,33,44))
    lb=tk.Listbox(window,listvariable=var2)
    list_items=[1,2,3,4]
    for item in list_items:
        lb.insert('end',item)
    #在列表部件的第2行,加'first'
    lb.insert(1,'first')
    #在列表部件的第3行加 'second'
    lb.insert(2,'second')
    #删除第三行
    lb.delete(2)
    lb.pack()
    window.mainloop()
    

    效果图如下:

    在这里插入图片描述

    4 .Radiobutton 单选框

    Radiobutton 为单选按钮,即在同一组内只能有一个按钮被选中,每当选中组内的一个按钮时,其他 的按钮
    自动改为非选中状态,与其他控件不同的是,他有组的概念。

    完整代码如下:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    var=tk.StringVar()
    l=tk.Label(window,bg='yellow',width=20,text='空')
    l.pack()
    
    def print_selection():
        #config能对所有的参数进行更改,在函数定义中选择text属性进行更改
        l.config(text='you have selected '+var.get())
        
    r1=tk.Radiobutton(window,text='Option A',
                        #按钮的值为 A   value='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()
    
    

    效果图:

    在这里插入图片描述

    5. Scale 尺度

    可以被拉动的一个条,Scale返回的是一个数字。如下所示,当拉动时会在Label上显示具体的数字。

    效果图:

    在这里插入图片描述

    完整代码:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    l=tk.Label(window,bg='yellow',width=20,text='empty')
    l.pack()
    
    #在Scale中所定义的command功能是有默认传入值的,该传入值即为Scale标签
    #当前标注的值。所以在定义print_selection函数时需要定义一个参数用于表示该传入值
    def print_selection(v):
        l.config(text='you have selected '+v)
        
    #定义Scale的属性时,名字为label,from to为取值范围,
    #from_是为了区分python中的from,Scale还有横向和竖向属性,注意为tk.横向/竖向。
    #length为显示的长度,不同于Label中的width,width的单位是字符,
    #和length的单位是像素。showvalue即是否显示所选中的数字,取值为0时不显示,
    #为1时显示。显示的标签单位长度为tickinterval,即显示出的数字的间隔,取值为3时,
    #即显示5,8,11。resolution为要保留的小数个数。
    s=tk.Scale(window,label='try me',from_=5,to=11,
        #VERTICAL:竖向  HORIZONTAL:横向 
        orient=tk.HORIZONTAL,
        length=200,showvalue=0,tickinterval=3,resolution=0.01,
        command=print_selection)
    s.pack()
    window.mainloop()
    
    

    6. Checkbutton 多选框:

    与Radiobutton类似,但是Radiobutton选中一个后其他默认为不选中,但是Checkbutton类似于多选,可以选中多个。Checkbutton可以表示两种状态:on off,可以设置回调函数,每当点击此按钮时,回调函数被调用
    选择不同的复选框,会有不同的文本显示

    完整代码:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    l=tk.Label(window,bg='yellow',width=20,text='空')
    l.pack()
    
    def print_selection():
        if(var1.get()==1)&(var2.get()==0):
            l.config(text='I love only Python')
        elif(var1.get()==0)&(var2.get()==1):
            l.config(text='I love only C++')
        elif(var1.get()==0)&(var2.get()==0):
            l.config(text='I do not love either')
        else:
            l.config(text='I love both')   
            
    #变量为整形
    var1=tk.IntVar()
    var2=tk.IntVar()
    #并且选中时value为1,即onvalue=1,未选中时offvalue=0.
    #通过var1变量才能赋值或取值 var.get() 并且选中时value为1,即onvalue=1,未选中时offvalue=0. var.set()
    c1=tk.Checkbutton(window,text='Python',variable=var1,onvalue=1,offvalue=0,
                      command=print_selection)
    c2=tk.Checkbutton(window,text='C++',variable=var2,onvalue=1,offvalue=0,
                      command=print_selection)
    c1.pack()
    c2.pack()
    window.mainloop()
    

    效果图:

    在这里插入图片描述

    7. Canvas 画布

    规定一片区域,可以放置图片、图形等等,并且可以把位置和形状进行改变。

    完整代码:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    # 首先定义一个Canvas
    #放置一张图片,首先读取读片并存入到image_file中,
    #注意10,10为放置的坐标,anchor意为锚点,即锚定的位置,可选择的属性如下所示:
    #nw即为放置在左上角,图片最左上角的点放置的坐标应为所定义的10,10.
    #接着create.line从坐标为(90,90)到(120,120)绘制一条直线。
    #create.oval为绘制圆形,fill填充颜色。
    #create.arc为绘制扇形,start和extent表示该扇形从0°到180°。
    #create.rectangle为绘制一个正方形。
    #此外,定义了一个button,该按钮的作用是每点击一次,rect对象,
    #即为所绘制的正方形下移两格,moveit函数中0表示x方向的位移为0,2为y方向上
    #的位移变化尺度。
    canvas=tk.Canvas(window,bg='blue',height=150,width=200)
    image_file=tk.PhotoImage(file='3.png')
    image=canvas.create_image(10,10,anchor='nw',image=image_file)
    x0,y0,x1,y1=90,90,120,120
    line=canvas.create_line(x0,y0,x1,y1)
    oval=canvas.create_oval(x0,y0,x1,y1,fill='yellow')
    arc=canvas.create_arc(x0+30,y0+30,x1+30,y1+30,start=0,extent=180,fill='green')
    rect=canvas.create_rectangle(100,30,100+20,30+20)
    canvas.pack()
    
    def moveit():
        #rect y轴方向上下移2个单位  x:x方向  y:y方向
        canvas.move(rect,0,2)
        
    b=tk.Button(window,text='move',command=moveit).pack()
    window.mainloop()
    

    8.Menubar 菜单

    菜单条,如下所示为本节将要完成的简单菜单条

    在这里插入图片描述

    完整代码:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    l=tk.Label(window,text='',bg='yellow')
    l.pack()
    counter=0
    def do_job():
        global counter
        l.config(text='do '+str(counter))
        counter+=1
        
    menubar=tk.Menu(window)
    filemenu=tk.Menu(menubar,tearoff=0)
    menubar.add_cascade(label='File',menu=filemenu)
    filemenu.add_command(label='New',command=do_job)
    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)
    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)
    submenu=tk.Menu(filemenu)
    filemenu.add_cascade(label='Import',menu=submenu,underline=0)
    submenu.add_command(label='Submenu1',command=do_job)
    window.config(menu=menubar)
    window.mainloop() 
    

    9 .Frame 框架

    底层框架,可以在上面放各种小部件

    在这里插入图片描述

    首先定义一个主Frame,放在window上
    接着定义了第二层的两个Frame,分别放在主Frame的左右侧
    在左边的Frame上放置了两个标签,右边放了一个标签

    完整代码:

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    tk.Label(window,text='on the window').pack()
    frm=tk.Frame(window)
    frm.pack()
    frm_l=tk.Frame(frm,)
    frm_r=tk.Frame(frm)
    frm_l.pack(side='left')
    frm_r.pack(side='right')
    tk.Label(frm_l,text='on the frm_l1').pack()
    tk.Label(frm_l,text='on the frm_l2').pack()
    tk.Label(frm_r,text='on the frm_r1').pack()
    window.mainloop() 
    

    10.scroll(滚动条)

    import tkinter as tk
    
    window = tk.Tk()
    window.title('my window')
    window.geometry('300x300')
    
    text = tk.Text(window,bg='Yellow',width=100,height=10)
    scroll = tk.Scrollbar(window)
    scroll.pack(side=RIGHT,fill=Y)
    text.pack(side=RIGHT,fill=Y)
    scroll.config(command=text.yview)
    text.config(yscrollcommand=scroll.set)
    str='''fsafsfsfsd
        fdfsdafasfwef
        fsafsfasfds
        asfasdfsadfs
        fasdfsf
    '''
    
    text.insert(insert,str)
    window.mainloop()
    

    在这里插入图片描述

    展开全文
  • tkinter python 播出视频

    2020-04-27 11:04:06
    利用opencv在tkinter 中播放视频 一般我们使用opencv来获取视频的帧 import cv2 from PIL import Image,...# opencv2 是 三方库 需要 pip install python-opencv video_path = './welcome.wmv' # 视频的路径 win ...

    利用opencv在tkinter 中播放视频

    一般我们使用opencv来获取视频的帧

    import cv2 
    from PIL import Image,ImageTk
    import tkinter as tk
    # 导入一些包
    # opencv2 是 三方库 需要 pip install python-opencv
    video_path = './welcome.wmv' # 视频的路径
    win = tk.Tk() # 创建窗口
    Label_movie = tk.Label(win) # 创建一个Label,用来安置后面的视频的帧
    Label_movie.place(relwidth=1,relheight=1,x=1,y=1) # 全屏放置
    video = cv2.VideoCapture(video_path) # 将视频读取,并将其创建为一个cv对象
    
    while video.isOpened(): # 如果被打开
        
        result,movieFrame =  video.read() # 读取视频对象的信息 result 代表视频还有没有帧数,如果有,那么True,否则反之,第二个是帧的图片序列 
        if result: # 如果视频没播完
            image_cv = Image.fromarray(movieFrame) # 将帧的图片序列转化为图片对象
            image_tk = ImageTk.PhotoImage(image=image_cv) # 将图片对象传入tkinter支持的对象
            Label_movie.config(image=image_tk) # 将Label的图片参数修改为image_tk
            Label_movie.image = image_tk # 同上,如果少了这句话,那么会导致部分的视频闪烁
            win.update()  # 更新窗口 
        else:#   如果视频播完了,那么退出循环
            break   
    
    win.mainloop() # 窗口的循环
    
    展开全文
  • 1 import tkinter #######创建主窗口 3 win = tkinter.Tk() ####### 设置标题 4 win.title("yudanqu") ####### 设置大小和位置 5 win.geometry("400x400+200+50") ####...

    tkinter python(图形开发界面)

    目录

    1、简单实例 
    2、Label控件 
    3、Button控件 
    4、Entry控件 
    5、点击按钮输出输入框中的内容 
    6、Text控件 
    7、带滚动条的Text 
    8、Checkbutton多选框控件 
    9、Radiobutton单选框 
    10、Listbox控件一 
    11、Listbox控件二 
    12、Listbox控件三 
    13、Listbox四 
    14、Scale控件 
    15、Spinbox控件 
    16、Menu顶层菜单 
    17、Menu鼠标右键菜单 
    18、Combobox下拉控件 
    19、Frame控件 
    20、表格数据 
    21、树状数据 
    22、绝对布局 
    23、相对布局 
    24、表格布局 
    25、鼠标点击事件 
    26、鼠标移动事件 
    27、鼠标释放事件 
    28、进入和离开事件 
    29、响应所有按键的事件 
    30、响应特殊按键事件 
    31、指定按键事件 
    32、组合按键事件
    

    1、简单实例

    下面的代码是创建出一个窗口,其他的操作就在这个平台上进行。执行之后会在桌面弹出一个窗口,窗口的标题就是代码中设置的 你好.title。这里说一下,我使用的版本是python3.7。后面的内容尽量按顺序看,后面的控件也许用到前面写到的东西。

    1 import tkinter 
    #创建主窗口
    3 win = tkinter.Tk()
    # 设置标题
    4 win.title("你好")
    # 设置大小和位置
    5 win.geometry("400x400+200+50")
    # 一般接受的参数为"400x400+20+20"(数值分别代表:长度x宽度+屏幕x方向数值+屏幕y方向数值,x和y都是以屏幕左上角为原点)类的参数,注意这里x为小写字母x,不是乘号,使用大写X或者*都会报错:bad geometry specifier "400*400+200+200"。另外,当我们想要结合屏幕尺寸确定上述参数具体数值是,需要注意参数中的数值(400、400、20、20)应为整数,否则也会发生错误:TclError: bad geometry specifier "400x400+20.0+200"。
    # 进入消息循环,可以写控件
    6 win.mainloop()
    

    2、Label控件

    import tkinter
    win = tkinter.Tk()
    win.title("你好")
    win.geometry("400x400+200+50")
    
    ## Label:标签控件,可以显示文本
    # win:父窗体
    # text:显示的文本内容
    # bg:背景色
    # fg:字体颜色
    # font:字体
    # wraplength:指定text文本中多宽之后换行
    # justify:设置换行后的对齐方式
    # anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
    label = tkinter.Label(win,
                           text="你好",
                           bg="pink", fg="red",  #用英语表示,汉语会报错》
                           font=("黑体", 20),  #使用系统字体库里的字体,如果系统库没有,则默认宋体
                           width=20,height=10,   # bg(背景色)宽度和高度
                           wraplength=100, justify="left",  #标题text的长度和换行之后左对齐/右对齐
                           anchor="ne") #必须是 (n, ne, e, se, s, sw, w, nw, or center) en这种写法会报错
    # 显示出来
    label.pack()
    win.mainloop()
    

    3、Button控件

    import tkinter
    def func():
         print("aaaaaaaaaaaaaaaaaaaaaaa")
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # 创建按钮,默认是居中排列(在整个标签的中间,然后中间从上往下一次排列)
    button1 = tkinter.Button(win, text="按钮", command=func, width=10, height=10)
    button1.pack()      #func后边不能有括号“()”
    # 标签中的参数(bg,fg,font等参数)也都可以在按钮中使用
    button2 = tkinter.Button(win, text="按钮",font=("宋体",20),bg="red", command=lambda: print("bbbbbbbbbbbb"))
    button2.pack()
    
    button3 = tkinter.Button(win, text="退出", command=win.quit)
    button3.pack()
    
    win.mainloop()
    

    4、Entry控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    Entry:输入控件,用于显示简单的文本内容
    
    # 密文显示
    entry1 = tkinter.Entry(win, show="*") # show="*" 表示的字符数字等以星号*来表示,通常用于输入密码隐藏
    entry1.pack()
    
    # 绑定变量
    e = tkinter.Variable()
    
    entry2 = tkinter.Entry(win, textvariable=e)  #textvariable可以换成text
    entry2.pack()
    
    # e就代表输入框这个对象
    # 设置默认值,可以为空或者写一些用于提示用户此处应该输入什么信息的提示语:输入姓名、密码
    e.set("提示语eee")
    # 取值
    print(e.get())     #此处是为了查看e的设置结果,实际操作中不用写
    print(entry2.get())   #此处是为了查看entry2的设置结果,实际操作中不用写
    
    win.mainloop()
    

    5、点击按钮输出输入框中的内容

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    def showinfo():
    # 获取输入的内容
    	print(entry.get())
    
    entry = tkinter.Entry(win)
    entry.pack()
    
    button = tkinter.Button(win, text="按钮", command=showinfo)
    button.pack()
    
    win.mainloop()
    

    6、Text文本控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    文本控件:用于显示多行文本
    
    # height 高度,表示的是显示的行数
    text = tkinter.Text(win, width=30, height=10)
    text.pack()
    
    str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
    # str在这里只是一个变量,可以用其他任意变量名替换,这里用str的目的只是为了说明输入的是一段文本
    text.insert(tkinter.INSERT, str)   # INSERT不能用小写insert,否则报错。str可用其他变量名替换
    
    win.mainloop()
    

    7、带滚动条的Text

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    文本控件:用于显示多行文本
    
    # 创建滚动条
    scroll = tkinter.Scrollbar()
    
    text = tkinter.Text(win, width=30, height=10)
    # side放到窗体的哪一侧,  fill填充
    scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
    text.pack(side=tkinter.LEFT, fill=tkinter.Y)
    # 关联
    scroll.config(command=text.yview)
    text.config(yscrollcommand=scroll.set)
    
    text.pack()
    
    str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
    
    text.insert(tkinter.INSERT, str)
    
    win.mainloop()
    

    8、Checkbutton多选框控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    def updata():
        message = ""
        if hobby1.get() ==True:
            message += "money\n"
        if hobby2.get() == True:
            message += "power\n"
        if hobby3.get() == True:
            message += "people\n"
    
        # 清空text中所有内容
        text.delete(0.0, tkinter.END)
        text.insert(tkinter.INSERT, message)
    
    # 要绑定的变量
    hobby1 = tkinter.BooleanVar()
    # 多选框
    check1 = tkinter.Checkbutton(win, text="money", variable=hobby1, command=updata)
    check1.pack()
    hobby2 = tkinter.BooleanVar()
    check2 = tkinter.Checkbutton(win, text="power", variable=hobby2, command=updata)
    check2.pack()
    hobby3 = tkinter.BooleanVar()
    check3 = tkinter.Checkbutton(win, text="people", variable=hobby3, command=updata)
    check3.pack()
    
    text = tkinter.Text(win, width=50, height=5)
    text.pack()
    
    win.mainloop()
    

    9、Radiobutton单选框

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    def updata():
        print(r.get())
    
    # 绑定变量,一组单选框要绑定同一个变量,就能区分出单选框了
    r = tkinter.IntVar()
    
    radio1 = tkinter.Radiobutton(win, text="one", value=1, variable=r, command=updata)
    radio1.pack()
    radio2 = tkinter.Radiobutton(win, text="two", value=2, variable=r, command=updata)
    radio2.pack()
    
    win.mainloop()
    

    10、Listbox控件一

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    '''
    列表框控件:可以包含一个或多个文本框
    作用:在listbox控件的小窗口显示一个字符串
    '''
    
    # 创建一个listbox,添加几个元素
    lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
    lb.pack()
    
    for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
        # 按顺序添加
        lb.insert(tkinter.END, item)
    
    # 在开始添加
    lb.insert(tkinter.ACTIVE, "cool")
    
    # 将列表当做一个元素添加
    # lb.insert(tkinter.END, ["very good", "very nice"])
    
    # 删除:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只删除第一个索引处的内容
    lb.delete(1,3)
    
    # 选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只选中第一个索引处的内容
    lb.select_set(2,3)
    
    # 取消选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只取消第一个索引处的内容
    lb.select_clear(2)
    
    # 获取到列表中的元素个数
    print(lb.size())
    # 获取值
    print(lb.get(2,3))
    
    # 返回当前的索引项,不是item元素
    print(lb.curselection())
    
    # 判断:一个选项是否被选中
    print(lb.selection_includes(3))
    
    win.mainloop()
    

    11、Listbox控件二

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # 绑定变量
    lbv = tkinter.StringVar()
    
    # 与BORWSE相似,但是不支持鼠标按下后移动选中位置
    lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=lbv)
    lb.pack()
    
    for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
        # 按顺序添加
        lb.insert(tkinter.END, item)
    
    # 打印当前列表中的选型
    print(lbv.get())
    
    # 设置选项
    # lbv.set(("1","2","3"))
    
    # 绑定事件
    def myprint(event):
        # print(lb.curselection()) # 返回下标
        print(lb.get(lb.curselection())) # 返回值
    lb.bind("<Double-Button-1>", myprint)
    
    win.mainloop()
    

    12、Listbox控件三

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    # win.geometry("400x400+200+50")
    
    # EXTENDED:可以使listbox支持shift和Ctrl
    lb = tkinter.Listbox(win, selectmode=tkinter.EXTENDED)
    lb.pack()
    
    for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
        # 按顺序添加
        lb.insert(tkinter.END, item)
    
    # 滚动条
    sc = tkinter.Scrollbar(win)
    sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
    # 配置
    lb.configure(yscrollcommand=sc.set)
    lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
    # 额外给属性赋值
    sc["command"] = lb.yview
    
    win.mainloop()
    

    13、Listbox四

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # MULTIPLE支持多选
    lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)
    lb.pack()
    
    for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
        # 按顺序添加
        lb.insert(tkinter.END, item)
    
    win.mainloop()
    

    14、Scale控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    '''
    供用户通过拖拽指示器来改变变量的值,可以水平,也可以竖直
    '''
    
    # tkinter.HORIZONTAL水平
    # tkinter.VERTICAL 竖直(默认)
    # length:水平时表示宽度,竖直时表示高度
    # tickintervar :选择值将会为该值得倍数
    
    scale1 = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=10, length=200)
    scale1.pack()
    
    # 设置值
    scale1.set(20)
    
    # 取值
    # print(scale1.get())
    
    def showNum():
        print(scale1.get())
    tkinter.Button(win, text="按钮", command=showNum).pack()
    
    win.mainloop()
    

    15、Spinbox控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    '''
    数值范围控件
    '''
    
    # 绑定变量
    v = tkinter.StringVar()
    
    def updata():
        print(v.get())
    
    # increment:步长,默认为1
    # values要输入一个元组 最好不要和from和to同时使用,而且步长也没用
    # command 只要值改变就会执行updata方法
    sp = tkinter.Spinbox(win, from_=0, to=100, increment=5,
                         textvariable=v, command=updata)
    # sp = tkinter.Spinbox(win, values=(0,2,4,6,8))
    sp.pack()
    
    # 赋值
    v.set(20)
    # 取值
    print(v.get())
    
    win.mainloop()
    

    16、Menu顶层菜单

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # 菜单条
    menubar = tkinter.Menu(win)
    win.config(menu=menubar)
    
    def func():
        print("**********")
    
    # 创建一个菜单选项
    menu1 = tkinter.Menu(menubar, tearoff=False)
    
    # 给菜单选项添加内容
    for item in ['python','c','java','c++', 'c#','php','B','退出']:
        if item == '退出':
            # 添加分割线
            menu1.add_separator()
            menu1.add_command(label=item, command=win.quit)
        else:
            menu1.add_command(label=item, command=func)
    
    # 向菜单条上添加菜单选项
    menubar.add_cascade(label='语言', menu=menu1)
    
    win.mainloop()
    

    17、Menu鼠标右键菜单

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # 菜单条
    menubar = tkinter.Menu(win)
    
    def func():
        print("**********")
    
    # 菜单
    menu = tkinter.Menu(menubar, tearoff=False)
    # 给菜单选项添加内容
    for item in ['python','c','java','c++', 'c#','php','B','退出']:
        if item == '退出':
            # 添加分割线
            menu.add_separator()
            menu.add_command(label=item, command=win.quit)
        else:
            menu.add_command(label=item, command=func)
    
    menubar.add_cascade(label="语言", menu=menu)
    
    def showMenu(event):
        menubar.post(event.x_root, event.y_root)
    
    win.bind("<Button-3>", showMenu)
    
    win.mainloop()
    

    18、Combobox下拉控件

    import tkinter
    from tkinter import ttk
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # 绑定变量
    cv = tkinter.StringVar()
    
    com = ttk.Combobox(win, textvariable=cv)
    com.pack()
    
    # 设置下拉数据
    com["value"] = ("黑龙江", "吉林", "辽宁")
    
    # 设置默认值
    com.current(0)
    
    # 绑定事件
    
    def func(event):
        print(com.get())
        print(cv.get())
    com.bind("<<ComboboxSelected>>", func)
    
    win.mainloop()
    

    19、Frame控件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    '''
    框架控件:在桌面上显示一个矩形区域,多作为一个容器控件
    '''
    
    frm = tkinter.Frame(win)
    frm.pack()
    
    # left
    frm_l = tkinter.Frame(frm)
    tkinter.Label(frm_l, text="左上", bg="pink").pack(side=tkinter.TOP)
    tkinter.Label(frm_l, text="左下", bg="blue").pack(side=tkinter.TOP)
    frm_l.pack(side=tkinter.LEFT)
    
    # right
    frm_r = tkinter.Frame(frm)
    tkinter.Label(frm_r, text="右上", bg="green").pack(side=tkinter.TOP)
    tkinter.Label(frm_r, text="右下", bg="red").pack(side=tkinter.TOP)
    frm_r.pack(side=tkinter.RIGHT)
    
    win.mainloop()
    

    20、表格数据

    import tkinter
    from tkinter import ttk
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("600x400+200+50")
    
    # 表格
    tree = ttk.Treeview(win)
    tree.pack()
    
    # 定义列
    tree["columns"] = ("姓名","年龄","身高","体重")
    # 设置列,列还不显示
    tree.column("姓名", width=100)
    tree.column("年龄", width=100)
    tree.column("身高", width=100)
    tree.column("体重", width=100)
    
    # 设置表头
    tree.heading("姓名", text="姓名-name")
    tree.heading("年龄", text="年龄-age")
    tree.heading("身高", text="身高-height")
    tree.heading("体重", text="体重-weight")
    
    # 添加数据
    tree.insert("", 0, text="line1", values=("小郑","34","177cm","70kg"))
    tree.insert("", 1, text="line2", values=("小张","43","188cm","90kg"))
    
    win.mainloop()
    

    21、树状数据

    import tkinter
    from tkinter import ttk
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    tree = ttk.Treeview(win)
    tree.pack()
    
    # 添加一级树枝
    treeF1 = tree.insert("",0,"中国",text= "中国Chi", values=("F1"))
    treeF2 = tree.insert("",1,"美国",text= "美国USA", values=("F1"))
    treeF3 = tree.insert("",2,"英国",text= "英国UK", values=("F1"))
    
    # 二级树枝
    treeF1_1 = tree.insert(treeF1,0,"黑龙江",text="中国黑龙江",values=("F1_1"))
    treeF1_2 = tree.insert(treeF1,1,"吉林",text="中国吉林",values=("F1_2"))
    treeF1_3 = tree.insert(treeF1,2,"辽宁",text="中国辽宁",values=("F1_3"))
    
    treeF2_1 = tree.insert(treeF2,0,"aaa",text="aaaa",values=("F2_1"))
    treeF2_2 = tree.insert(treeF2,1,"bbb",text="bbbb",values=("F2_2"))
    treeF2_3 = tree.insert(treeF2,2,"ccc",text="cccc",values=("F2_3"))
    
    # 三级树枝
    treeF1_1_1 = tree.insert(treeF1_1,0,"哈尔滨",text="黑龙江哈尔滨")
    treeF1_1_2 = tree.insert(treeF1_1,1,"五常",text="黑龙江五常")
    
    win.mainloop()
    

    22、绝对布局

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    label1 = tkinter.Label(win, text="good", bg="blue")
    label2 = tkinter.Label(win, text="nice", bg="red")
    label3 = tkinter.Label(win, text="cool", bg="green")
    
    # 绝对布局,窗口的变化对位置没有影响
    label1.place(x=10,y=10)
    label2.place(x=50,y=50)
    label3.place(x=100,y=100)
    
    win.mainloop()
    

    23、相对布局

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    label1 = tkinter.Label(win, text="good", bg="blue")
    label2 = tkinter.Label(win, text="nice", bg="red")
    label3 = tkinter.Label(win, text="cool", bg="green")
    
    # 相对布局,窗体改变对控件有影响
    label1.pack(fill=tkinter.Y, side=tkinter.LEFT)
    label2.pack(fill=tkinter.X, side=tkinter.TOP)
    label3.pack()
    
    win.mainloop()
    

    24、表格布局

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    label1 = tkinter.Label(win, text="good", bg="blue")
    label2 = tkinter.Label(win, text="nice", bg="red")
    label3 = tkinter.Label(win, text="cool", bg="green")
    label4 = tkinter.Label(win, text="handsome", bg="yellow")
    
    # 表格布局
    label1.grid(row=0,column=0)
    label2.grid(row=0,column=1)
    label3.grid(row=1,column=0)
    label4.grid(row=1,column=1)
    
    win.mainloop()
    

    25、鼠标点击事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    
    def func(event):
        print(event.x, event.y)
    
    # <Button-1>  鼠标左键
    # <Button-2>  鼠标滚轮
    # <Button-1>  鼠标右键
    # <Double-Button-1>  鼠标双击左键
    # <Triple-Button-1>  鼠标三击左键
    
    button1 = tkinter.Button(win, text="leftmouse button")
    # bind 给控件绑定数据(参数一是绑定的事件,参数二是触发事件的函数)
    button1.bind("<Button-1>", func)
    button1.pack()
    
    win.mainloop()
    

    26、鼠标移动事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    
    # <B1-Motion>  左键移动
    # <B2-Motion>  中键移动
    # <B3-Motion>  右键移动
    
    
    label = tkinter.Label(win, text="*********")
    label.pack()
    
    def func(event):
        print(event.x, event.y)
    
    label.bind("<B1-Motion>", func)
    
    win.mainloop()
    

    27、鼠标释放事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # <ButtonRelease-1> 释放鼠标左键
    # <ButtonRelease-2> 释放鼠标中键
    # <ButtonRelease-3> 释放鼠标右键
    
    
    label = tkinter.Label(win, text="*********", bg="red")
    label.pack()
    
    def func(event):
        print(event.x, event.y)
    
    label.bind("<ButtonRelease-1>", func)
    
    win.mainloop()
    

    28、进入和离开事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # <Enter>  当鼠标进入控件时触发事件
    # <Leave>  当鼠标离开控件时触发事件
    
    label = tkinter.Label(win, text="*********", bg="red")
    label.pack()
    
    def func(event):
        print(event.x, event.y)
    
    label.bind("<Enter>", func)
    label.bind("<Leave>", func)
    
    
    win.mainloop()
    

    29、响应所有按键的事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # <Key>  响应所有的按键(要有焦点)
    
    label = tkinter.Label(win, text="*********", bg="red")
    # 设置焦点
    label.focus_set()
    label.pack()
    
    def func(event):
        print("event.char=", event.char)
        print("event.keycode=", event.keycode)
    
    label.bind("<Key>", func)
    
    win.mainloop()
    

    30、响应特殊按键事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    # <Shift_L>  只响应左侧的shift键
    # <Shift_R>
    # <F5>
    # <Return>  也就是回车键
    # <BackSpace>  返回,也就是退格键
    
    label = tkinter.Label(win, text="*********", bg="red")
    # 设置焦点
    label.focus_set()
    label.pack()
    
    def func(event):
        print("event.char=", event.char)
        print("event.keycode=", event.keycode)
    
    
    label.bind("<Shift_L>", func)
    
    
    win.mainloop()
    

    31、指定按键事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    
    label = tkinter.Label(win, text="*********", bg="red")
    # 设置焦点
    label.focus_set()
    label.pack()
    
    def func(event):
        print("event.char=", event.char)
        print("event.keycode=", event.keycode)
    
    
    win.bind("a", func) # 注意前面改成了win,只需要写出按键名即可
    
    
    win.mainloop()
    

    32、组合按键事件

    import tkinter
    
    win = tkinter.Tk()
    win.title("yudanqu")
    win.geometry("400x400+200+50")
    
    
    # <Control-Alt-a>
    # <Shift-Up>
    # 只是control+alt不行
    
    label = tkinter.Label(win, text="*********", bg="red")
    # 设置焦点
    label.focus_set()
    label.pack()
    
    def func(event):
        print("event.char=", event.char)
        print("event.keycode=", event.keycode)
    
    
    win.bind("<Control-Alt-a>", func) # 注意前面改成了win,只需要写出按键名即可
    
    
    win.mainloop()
    

    出处

    滚动文本框

    —滚动文本框的详细代码在79-83行

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import tkinter as tk
    from tkinter import ttk
    from tkinter import scrolledtext        # 导入滚动文本框的模块
    
    win = tk.Tk()
    win.title("Python GUI")    # 添加标题
    
    ttk.Label(win, text="Chooes a number").grid(column=1, row=0)    # 添加一个标签,并将其列设置为1,行设置为0
    ttk.Label(win, text="Enter a name:").grid(column=0, row=0)      # 设置其在界面中出现的位置  column代表列   row 代表行
    
    # button被点击之后会被执行
    def clickMe():   # 当acction被点击时,该函数则生效
      action.configure(text='Hello ' + name.get() + ' ' + numberChosen.get())     # 设置button显示的内容
      print('check3 is %s %s' % (type(chvarEn.get()), chvarEn.get()))
    
    # 按钮
    action = ttk.Button(win, text="Click Me!", command=clickMe)     # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
    action.grid(column=2, row=1)    # 设置其在界面中出现的位置  column代表列   row 代表行
    
    # 文本框
    name = tk.StringVar()     # StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;不过一般用在按钮button上。改变StringVar,按钮上的文字也随之改变。
    nameEntered = ttk.Entry(win, width=12, textvariable=name)   # 创建一个文本框,定义长度为12个字符长度,并且将文本框中的内容绑定到上一句定义的name变量上,方便clickMe调用
    nameEntered.grid(column=0, row=1)       # 设置其在界面中出现的位置  column代表列   row 代表行
    nameEntered.focus()     # 当程序运行时,光标默认会出现在该文本框中
    
    # 创建一个下拉列表
    number = tk.StringVar()
    numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')
    numberChosen['values'] = (1, 2, 4, 42, 100)     # 设置下拉列表的值
    numberChosen.grid(column=1, row=1)      # 设置其在界面中出现的位置  column代表列   row 代表行
    numberChosen.current(0)    # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
    
    # 复选框
    chVarDis = tk.IntVar()   # 用来获取复选框是否被勾选,通过chVarDis.get()来获取其的状态,其状态值为int类型 勾选为1  未勾选为0
    check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state='disabled')    # text为该复选框后面显示的名称, variable将该复选框的状态赋值给一个变量,当state='disabled'时,该复选框为灰色,不能点的状态
    check1.select()     # 该复选框是否勾选,select为勾选, deselect为不勾选
    check1.grid(column=0, row=4, sticky=tk.W)       # sticky=tk.W  当该列中其他行或该行中的其他列的某一个功能拉长这列的宽度或高度时,设定该值可以保证本行保持左对齐,N:北/上对齐  S:南/下对齐  W:西/左对齐  E:东/右对齐
    
    chvarUn = tk.IntVar()
    check2 = tk.Checkbutton(win, text="UnChecked", variable=chvarUn)
    check2.deselect()
    check2.grid(column=1, row=4, sticky=tk.W)
    
    chvarEn = tk.IntVar()
    check3 = tk.Checkbutton(win, text="Enabled", variable=chvarEn)
    check3.select()
    check3.grid(column=2, row=4, sticky=tk.W)
    
    # 单选按钮
    
    # 定义几个颜色的全局变量
    COLOR1 = "Blue"
    COLOR2 = "Gold"
    COLOR3 = "chocolate1"
    
    # 单选按钮回调函数,就是当单选按钮被点击会执行该函数
    def radCall():
        radSel = radVar.get()
        if radSel == 1:
            win.configure(background=COLOR1)      # 设置整个界面的背景颜色
      elif radSel == 2:
            win.configure(background=COLOR2)
        elif radSel == 3:
            win.configure(background=COLOR3)
    
    radVar = tk.IntVar()    # 通过tk.IntVar() 获取单选按钮value参数对应的值
    rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall)      # 当该单选按钮被点击时,会触发参数command对应的函数
    rad1.grid(column=0, row=5, sticky=tk.W)     # 参数sticky对应的值参考复选框的解释
    
    rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)
    rad2.grid(column=1, row=5, sticky=tk.W)
    
    rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)
    rad3.grid(column=2, row=5, sticky=tk.W)
    
    # 滚动文本框
    scrolW = 30 # 设置文本框的长度
    scrolH = 3 # 设置文本框的高度
    scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)     # wrap=tk.WORD   这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
    scr.grid(column=0, columnspan=3)        # columnspan 个人理解是将3列合并成一列   也可以通过 sticky=tk.W  来控制该文本框的对齐方式
    
    win.mainloop()      # 当调用mainloop()时,窗口才会显示出来
    ![代码执行结果如图](https://img-blog.csdnimg.cn/20190121160009431.jpg)
    作者:_阿聪
    链接:https://www.jianshu.com/p/abea88607525
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    
    展开全文
  • 给大家分享一篇 tkinter python(图形开发界面)

    千次阅读 多人点赞 2018-08-15 15:10:51
    Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中...

    Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

    目录:

    1、简单实例
    2、Label控件
    3、Button控件
    4、Entry控件
    5、点击按钮输出输入框中的内容
    6、Text控件
    7、带滚动条的Text
    8、Checkbutton多选框控件
    9、Radiobutton单选框
    10、Listbox控件一
    11、Listbox控件二
    12、Listbox控件三
    13、Listbox四
    14、Scale控件
    15、Spinbox控件
    16、Menu顶层菜单
    17、Menu鼠标右键菜单
    18、Combobox下拉控件
    19、Frame控件
    20、表格数据
    21、树状数据
    22、绝对布局
    23、相对布局
    24、表格布局
    25、鼠标点击事件
    26、鼠标移动事件
    27、鼠标释放事件
    28、进入和离开事件
    29、响应所有按键的事件
    30、响应特殊按键事件
    31、指定按键事件
    32、组合按键事件

    1、简单实例

      下面的代码是创建出一个窗口,其他的操作就在这个平台上进行。执行之后会在桌面弹出一个窗口,窗口的标题就是代码中设置的win.title。这里说一下,我使用的版本是python3.6。后面的内容尽量按顺序看,后面的控件也许用到前面写到的东西。

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import tkinter
     5 
     6 
     7 # 创建主窗口
     8 win = tkinter.Tk()
     9 # 设置标题
    10 win.title("yudanqu")
    11 # 设置大小和位置
    12 win.geometry("400x400+200+50")
    13 
    14 # 进入消息循环,可以写控件
    15 
    16 win.mainloop()

    2、Label控件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import tkinter
     5 
     6 win = tkinter.Tk()
     7 win.title("yudanqu")
     8 win.geometry("400x400+200+50")
     9 
    10 '''
    11 Label:标签控件,可以显示文本
    12 '''
    13 # win:父窗体
    14 # text:显示的文本内容
    15 # bg:背景色
    16 # fg:字体颜色
    17 # font:字体
    18 # wraplength:指定text文本中多宽之后换行
    19 # justify:设置换行后的对齐方式
    20 # anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
    21 label = tkinter.Label(win,
    22                       text="this is a word",
    23                       bg="pink", fg="red",
    24                       font=("黑体", 20),
    25                       width=20,
    26                       height=10,
    27                       wraplength=100,
    28                       justify="left",
    29                       anchor="ne")
    30 
    31 # 显示出来
    32 label.pack()
    33 
    34 
    35 win.mainloop()

    3、Button控件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import tkinter
     5 
     6 
     7 def func():
     8     print("aaaaaaaaaaaaaaaaaaaaaaa")
     9 
    10 
    11 win = tkinter.Tk()
    12 win.title("yudanqu")
    13 win.geometry("400x400+200+50")
    14 
    15 
    16 # 创建按钮
    17 button1 = tkinter.Button(win, text="按钮", command=func, width=10, height=10)
    18 button1.pack()
    19 
    20 button2 = tkinter.Button(win, text="按钮", command=lambda: print("bbbbbbbbbbbb"))
    21 button2.pack()
    22 
    23 button3 = tkinter.Button(win, text="退出", command=win.quit)
    24 button3.pack()
    25 
    26 win.mainloop()

    4、Entry控件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import tkinter
     5 
     6 win = tkinter.Tk()
     7 win.title("yudanqu")
     8 win.geometry("400x400+200+50")
     9 
    10 '''
    11 Entry:输入控件,用于显示简单的文本内容
    12 '''
    13 
    14 # 密文显示
    15 entry1 = tkinter.Entry(win, show="*") # show="*" 可以表示输入密码
    16 entry1.pack()
    17 
    18 # 绑定变量
    19 e = tkinter.Variable()
    20 
    21 entry2 = tkinter.Entry(win, textvariable=e)
    22 entry2.pack()
    23 
    24 # e就代表输入框这个对象
    25 # 设置值
    26 e.set("wewewewewewe")
    27 # 取值
    28 print(e.get())
    29 print(entry2.get())
    30 
    31 win.mainloop()

    5、点击按钮输出输入框中的内容

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import tkinter
     4 
     5 win = tkinter.Tk()
     6 win.title("yudanqu")
     7 win.geometry("400x400+200+50")
     8 
     9 def showinfo():
    10     # 获取输入的内容
    11     print(entry.get())
    12 
    13 entry = tkinter.Entry(win)
    14 entry.pack()
    15 
    16 button = tkinter.Button(win, text="按钮", command=showinfo)
    17 button.pack()
    18 
    19 win.mainloop()

    6、Text控件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import tkinter
     4 
     5 win = tkinter.Tk()
     6 win.title("yudanqu")
     7 win.geometry("400x400+200+50")
     8 
     9 '''
    10 文本控件:用于显示多行文本
    11 '''
    12 
    13 # height表示的是显示的行数
    14 text = tkinter.Text(win, width=30, height=10)
    15 text.pack()
    16 
    17 str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
    18 
    19 text.insert(tkinter.INSERT, str)
    20 
    21 win.mainloop()

    7、带滚动条的Text

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 
     5 import tkinter
     6 
     7 win = tkinter.Tk()
     8 win.title("yudanqu")
     9 # win.geometry("400x400+200+50")
    10 
    11 '''
    12 文本控件:用于显示多行文本
    13 '''
    14 
    15 # 创建滚动条
    16 scroll = tkinter.Scrollbar()
    17 
    18 text = tkinter.Text(win, width=30, height=10)
    19 # side放到窗体的哪一侧,  fill填充
    20 scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
    21 text.pack(side=tkinter.LEFT, fill=tkinter.Y)
    22 # 关联
    23 scroll.config(command=text.yview)
    24 text.config(yscrollcommand=scroll.set)
    25 
    26 text.pack()
    27 
    28 str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
    29 
    30 text.insert(tkinter.INSERT, str)
    31 
    32 win.mainloop()

    8、Checkbutton多选框控件

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import tkinter
     4 
     5 win = tkinter.Tk()
     6 win.title("yudanqu")
     7 win.geometry("400x400+200+50")
     8 
     9 def updata():
    10     message = ""
    11     if hobby1.get() ==True:
    12         message += "money\n"
    13     if hobby2.get() == True:
    14         message += "power\n"
    15     if hobby3.get() == True:
    16         message += "people\n"
    17 
    18     # 清空text中所有内容
    19     text.delete(0.0, tkinter.END)
    20     text.insert(tkinter.INSERT, message)
    21 
    22 # 要绑定的变量
    23 hobby1 = tkinter.BooleanVar()
    24 # 多选框
    25 check1 = tkinter.Checkbutton(win, text="money", variable=hobby1, command=updata)
    26 check1.pack()
    27 hobby2 = tkinter.BooleanVar()
    28 check2 = tkinter.Checkbutton(win, text="power", variable=hobby2, command=updata)
    29 check2.pack()
    30 hobby3 = tkinter.BooleanVar()
    31 check3 = tkinter.Checkbutton(win, text="people", variable=hobby3, command=updata)
    32 check3.pack()
    33 
    34 text = tkinter.Text(win, width=50, height=5)
    35 text.pack()
    36 
    37 win.mainloop()

    9、Radiobutton单选框

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 def updata():
     8     print(r.get())
     9 
    10 # 绑定变量,一组单选框要绑定同一个变量,就能区分出单选框了
    11 r = tkinter.IntVar()
    12 
    13 radio1 = tkinter.Radiobutton(win, text="one", value=1, variable=r, command=updata)
    14 radio1.pack()
    15 radio2 = tkinter.Radiobutton(win, text="two", value=2, variable=r, command=updata)
    16 radio2.pack()
    17 
    18 win.mainloop()

    10、Listbox控件一

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import tkinter
     4 
     5 win = tkinter.Tk()
     6 win.title("yudanqu")
     7 win.geometry("400x400+200+50")
     8 
     9 '''
    10 列表框控件:可以包含一个或多个文本框
    11 作用:在listbox控件的小窗口显示一个字符串
    12 '''
    13 
    14 # 创建一个listbox,添加几个元素
    15 lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
    16 lb.pack()
    17 
    18 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
    19     # 按顺序添加
    20     lb.insert(tkinter.END, item)
    21 
    22 # 在开始添加
    23 lb.insert(tkinter.ACTIVE, "cool")
    24 
    25 # 将列表当做一个元素添加
    26 # lb.insert(tkinter.END, ["very good", "very nice"])
    27 
    28 # 删除:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只删除第一个索引处的内容
    29 lb.delete(1,3)
    30 
    31 # 选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只选中第一个索引处的内容
    32 lb.select_set(2,3)
    33 
    34 # 取消选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只取消第一个索引处的内容
    35 lb.select_clear(2)
    36 
    37 # 获取到列表中的元素个数
    38 print(lb.size())
    39 # 获取值
    40 print(lb.get(2,3))
    41 
    42 # 返回当前的索引项,不是item元素
    43 print(lb.curselection())
    44 
    45 # 判断:一个选项是否被选中
    46 print(lb.selection_includes(3))
    47 
    48 win.mainloop()

    11、Listbox控件二

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # 绑定变量
     8 lbv = tkinter.StringVar()
     9 
    10 # 与BORWSE相似,但是不支持鼠标按下后移动选中位置
    11 lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=lbv)
    12 lb.pack()
    13 
    14 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
    15     # 按顺序添加
    16     lb.insert(tkinter.END, item)
    17 
    18 # 打印当前列表中的选型
    19 print(lbv.get())
    20 
    21 # 设置选项
    22 # lbv.set(("1","2","3"))
    23 
    24 # 绑定事件
    25 def myprint(event):
    26     # print(lb.curselection()) # 返回下标
    27     print(lb.get(lb.curselection())) # 返回值
    28 lb.bind("<Double-Button-1>", myprint)
    29 
    30 win.mainloop()

    12、Listbox控件三

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 # win.geometry("400x400+200+50")
     6 
     7 # EXTENDED:可以使listbox支持shift和Ctrl
     8 lb = tkinter.Listbox(win, selectmode=tkinter.EXTENDED)
     9 lb.pack()
    10 
    11 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
    12     # 按顺序添加
    13     lb.insert(tkinter.END, item)
    14 
    15 # 滚动条
    16 sc = tkinter.Scrollbar(win)
    17 sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
    18 # 配置
    19 lb.configure(yscrollcommand=sc.set)
    20 lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
    21 # 额外给属性赋值
    22 sc["command"] = lb.yview
    23 
    24 win.mainloop()

    13、Listbox四

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # MULTIPLE支持多选
     8 lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)
     9 lb.pack()
    10 
    11 for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
    12     # 按顺序添加
    13     lb.insert(tkinter.END, item)
    14 
    15 win.mainloop()

    14、Scale控件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 '''
     8 供用户通过拖拽指示器来改变变量的值,可以水平,也可以竖直
     9 '''
    10 
    11 # tkinter.HORIZONTAL水平
    12 # tkinter.VERTICAL 竖直(默认)
    13 # length:水平时表示宽度,竖直时表示高度
    14 # tickintervar :选择值将会为该值得倍数
    15 
    16 scale1 = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=10, length=200)
    17 scale1.pack()
    18 
    19 # 设置值
    20 scale1.set(20)
    21 
    22 # 取值
    23 # print(scale1.get())
    24 
    25 def showNum():
    26     print(scale1.get())
    27 tkinter.Button(win, text="按钮", command=showNum).pack()
    28 
    29 win.mainloop()

    15、Spinbox控件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 '''
     8 数值范围控件
     9 '''
    10 
    11 # 绑定变量
    12 v = tkinter.StringVar()
    13 
    14 def updata():
    15     print(v.get())
    16 
    17 # increment:步长,默认为1
    18 # values要输入一个元组 最好不要和from和to同时使用,而且步长也没用
    19 # command 只要值改变就会执行updata方法
    20 sp = tkinter.Spinbox(win, from_=0, to=100, increment=5,
    21                      textvariable=v, command=updata)
    22 # sp = tkinter.Spinbox(win, values=(0,2,4,6,8))
    23 sp.pack()
    24 
    25 # 赋值
    26 v.set(20)
    27 # 取值
    28 print(v.get())
    29 
    30 win.mainloop()

    16、Menu顶层菜单

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # 菜单条
     8 menubar = tkinter.Menu(win)
     9 win.config(menu=menubar)
    10 
    11 def func():
    12     print("**********")
    13 
    14 # 创建一个菜单选项
    15 menu1 = tkinter.Menu(menubar, tearoff=False)
    16 
    17 # 给菜单选项添加内容
    18 for item in ['python','c','java','c++', 'c#','php','B','退出']:
    19     if item == '退出':
    20         # 添加分割线
    21         menu1.add_separator()
    22         menu1.add_command(label=item, command=win.quit)
    23     else:
    24         menu1.add_command(label=item, command=func)
    25 
    26 # 向菜单条上添加菜单选项
    27 menubar.add_cascade(label='语言', menu=menu1)
    28 
    29 win.mainloop()

    17、Menu鼠标右键菜单

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # 菜单条
     8 menubar = tkinter.Menu(win)
     9 
    10 def func():
    11     print("**********")
    12 
    13 # 菜单
    14 menu = tkinter.Menu(menubar, tearoff=False)
    15 # 给菜单选项添加内容
    16 for item in ['python','c','java','c++', 'c#','php','B','退出']:
    17     if item == '退出':
    18         # 添加分割线
    19         menu.add_separator()
    20         menu.add_command(label=item, command=win.quit)
    21     else:
    22         menu.add_command(label=item, command=func)
    23 
    24 menubar.add_cascade(label="语言", menu=menu)
    25 
    26 def showMenu(event):
    27     menubar.post(event.x_root, event.y_root)
    28 
    29 win.bind("<Button-3>", showMenu)
    30 
    31 win.mainloop()

    18、Combobox下拉控件

     1 import tkinter
     2 from tkinter import ttk
     3 
     4 win = tkinter.Tk()
     5 win.title("yudanqu")
     6 win.geometry("400x400+200+50")
     7 
     8 # 绑定变量
     9 cv = tkinter.StringVar()
    10 
    11 com = ttk.Combobox(win, textvariable=cv)
    12 com.pack()
    13 
    14 # 设置下拉数据
    15 com["value"] = ("黑龙江", "吉林", "辽宁")
    16 
    17 # 设置默认值
    18 com.current(0)
    19 
    20 # 绑定事件
    21 
    22 def func(event):
    23     print(com.get())
    24     print(cv.get())
    25 com.bind("<<ComboboxSelected>>", func)
    26 
    27 win.mainloop()

    19、Frame控件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 '''
     8 框架控件:在桌面上显示一个矩形区域,多作为一个容器控件
     9 '''
    10 
    11 frm = tkinter.Frame(win)
    12 frm.pack()
    13 
    14 # left
    15 frm_l = tkinter.Frame(frm)
    16 tkinter.Label(frm_l, text="左上", bg="pink").pack(side=tkinter.TOP)
    17 tkinter.Label(frm_l, text="左下", bg="blue").pack(side=tkinter.TOP)
    18 frm_l.pack(side=tkinter.LEFT)
    19 
    20 # right
    21 frm_r = tkinter.Frame(frm)
    22 tkinter.Label(frm_r, text="右上", bg="green").pack(side=tkinter.TOP)
    23 tkinter.Label(frm_r, text="右下", bg="red").pack(side=tkinter.TOP)
    24 frm_r.pack(side=tkinter.RIGHT)
    25 
    26 win.mainloop()

    20、表格数据

     1 import tkinter
     2 from tkinter import ttk
     3 
     4 win = tkinter.Tk()
     5 win.title("yudanqu")
     6 win.geometry("600x400+200+50")
     7 
     8 # 表格
     9 tree = ttk.Treeview(win)
    10 tree.pack()
    11 
    12 # 定义列
    13 tree["columns"] = ("姓名","年龄","身高","体重")
    14 # 设置列,列还不显示
    15 tree.column("姓名", width=100)
    16 tree.column("年龄", width=100)
    17 tree.column("身高", width=100)
    18 tree.column("体重", width=100)
    19 
    20 # 设置表头
    21 tree.heading("姓名", text="姓名-name")
    22 tree.heading("年龄", text="年龄-age")
    23 tree.heading("身高", text="身高-height")
    24 tree.heading("体重", text="体重-weight")
    25 
    26 # 添加数据
    27 tree.insert("", 0, text="line1", values=("小郑","34","177cm","70kg"))
    28 tree.insert("", 1, text="line2", values=("小张","43","188cm","90kg"))
    29 
    30 win.mainloop()

    21、树状数据

     1 import tkinter
     2 from tkinter import ttk
     3 
     4 win = tkinter.Tk()
     5 win.title("yudanqu")
     6 win.geometry("400x400+200+50")
     7 
     8 tree = ttk.Treeview(win)
     9 tree.pack()
    10 
    11 # 添加一级树枝
    12 treeF1 = tree.insert("",0,"中国",text= "中国Chi", values=("F1"))
    13 treeF2 = tree.insert("",1,"美国",text= "美国USA", values=("F1"))
    14 treeF3 = tree.insert("",2,"英国",text= "英国UK", values=("F1"))
    15 
    16 # 二级树枝
    17 treeF1_1 = tree.insert(treeF1,0,"黑龙江",text="中国黑龙江",values=("F1_1"))
    18 treeF1_2 = tree.insert(treeF1,1,"吉林",text="中国吉林",values=("F1_2"))
    19 treeF1_3 = tree.insert(treeF1,2,"辽宁",text="中国辽宁",values=("F1_3"))
    20 
    21 treeF2_1 = tree.insert(treeF2,0,"aaa",text="aaaa",values=("F2_1"))
    22 treeF2_2 = tree.insert(treeF2,1,"bbb",text="bbbb",values=("F2_2"))
    23 treeF2_3 = tree.insert(treeF2,2,"ccc",text="cccc",values=("F2_3"))
    24 
    25 # 三级树枝
    26 treeF1_1_1 = tree.insert(treeF1_1,0,"哈尔滨",text="黑龙江哈尔滨")
    27 treeF1_1_2 = tree.insert(treeF1_1,1,"五常",text="黑龙江五常")
    28 
    29 win.mainloop()

    22、绝对布局

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 label1 = tkinter.Label(win, text="good", bg="blue")
     8 label2 = tkinter.Label(win, text="nice", bg="red")
     9 label3 = tkinter.Label(win, text="cool", bg="green")
    10 
    11 # 绝对布局,窗口的变化对位置没有影响
    12 label1.place(x=10,y=10)
    13 label2.place(x=50,y=50)
    14 label3.place(x=100,y=100)
    15 
    16 win.mainloop()

    23、相对布局

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 label1 = tkinter.Label(win, text="good", bg="blue")
     8 label2 = tkinter.Label(win, text="nice", bg="red")
     9 label3 = tkinter.Label(win, text="cool", bg="green")
    10 
    11 # 相对布局,窗体改变对控件有影响
    12 label1.pack(fill=tkinter.Y, side=tkinter.LEFT)
    13 label2.pack(fill=tkinter.X, side=tkinter.TOP)
    14 label3.pack()
    15 
    16 win.mainloop()

    24、表格布局

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 label1 = tkinter.Label(win, text="good", bg="blue")
     8 label2 = tkinter.Label(win, text="nice", bg="red")
     9 label3 = tkinter.Label(win, text="cool", bg="green")
    10 label4 = tkinter.Label(win, text="handsome", bg="yellow")
    11 
    12 # 表格布局
    13 label1.grid(row=0,column=0)
    14 label2.grid(row=0,column=1)
    15 label3.grid(row=1,column=0)
    16 label4.grid(row=1,column=1)
    17 
    18 win.mainloop()

    25、鼠标点击事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 
     8 def func(event):
     9     print(event.x, event.y)
    10 
    11 # <Button-1>  鼠标左键
    12 # <Button-2>  鼠标滚轮
    13 # <Button-1>  鼠标右键
    14 # <Double-Button-1>  鼠标双击左键
    15 # <Triple-Button-1>  鼠标三击左键
    16 
    17 button1 = tkinter.Button(win, text="leftmouse button")
    18 # bind 给控件绑定数据(参数一是绑定的事件,参数二是触发事件的函数)
    19 button1.bind("<Button-1>", func)
    20 button1.pack()
    21 
    22 win.mainloop()

    26、鼠标移动事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 
     8 # <B1-Motion>  左键移动
     9 # <B2-Motion>  中键移动
    10 # <B3-Motion>  右键移动
    11 
    12 
    13 label = tkinter.Label(win, text="*********")
    14 label.pack()
    15 
    16 def func(event):
    17     print(event.x, event.y)
    18 
    19 label.bind("<B1-Motion>", func)
    20 
    21 win.mainloop()

    27、鼠标释放事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # <ButtonRelease-1> 释放鼠标左键
     8 # <ButtonRelease-2> 释放鼠标中键
     9 # <ButtonRelease-3> 释放鼠标右键
    10 
    11 
    12 label = tkinter.Label(win, text="*********", bg="red")
    13 label.pack()
    14 
    15 def func(event):
    16     print(event.x, event.y)
    17 
    18 label.bind("<ButtonRelease-1>", func)
    19 
    20 win.mainloop()

    28、进入和离开事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # <Enter>  当鼠标进入控件时触发事件
     8 # <Leave>  当鼠标离开控件时触发事件
     9 
    10 label = tkinter.Label(win, text="*********", bg="red")
    11 label.pack()
    12 
    13 def func(event):
    14     print(event.x, event.y)
    15 
    16 label.bind("<Enter>", func)
    17 label.bind("<Leave>", func)
    18 
    19 
    20 win.mainloop()

    29、响应所有按键的事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # <Key>  响应所有的按键(要有焦点)
     8 
     9 label = tkinter.Label(win, text="*********", bg="red")
    10 # 设置焦点
    11 label.focus_set()
    12 label.pack()
    13 
    14 def func(event):
    15     print("event.char=", event.char)
    16     print("event.keycode=", event.keycode)
    17 
    18 label.bind("<Key>", func)
    19 
    20 win.mainloop()

    30、响应特殊按键事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 # <Shift_L>  只响应左侧的shift键
     8 # <Shift_R>
     9 # <F5>
    10 # <Return>  也就是回车键
    11 # <BackSpace>  返回,也就是退格键
    12 
    13 label = tkinter.Label(win, text="*********", bg="red")
    14 # 设置焦点
    15 label.focus_set()
    16 label.pack()
    17 
    18 def func(event):
    19     print("event.char=", event.char)
    20     print("event.keycode=", event.keycode)
    21 
    22 
    23 label.bind("<Shift_L>", func)
    24 
    25 
    26 win.mainloop()

    31、指定按键事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 
     8 label = tkinter.Label(win, text="*********", bg="red")
     9 # 设置焦点
    10 label.focus_set()
    11 label.pack()
    12 
    13 def func(event):
    14     print("event.char=", event.char)
    15     print("event.keycode=", event.keycode)
    16 
    17 
    18 win.bind("a", func) # 注意前面改成了win,只需要写出按键名即可
    19 
    20 
    21 win.mainloop()

    32、组合按键事件

     1 import tkinter
     2 
     3 win = tkinter.Tk()
     4 win.title("yudanqu")
     5 win.geometry("400x400+200+50")
     6 
     7 
     8 # <Control-Alt-a>
     9 # <Shift-Up>
    10 # 只是control+alt不行
    11 
    12 label = tkinter.Label(win, text="*********", bg="red")
    13 # 设置焦点
    14 label.focus_set()
    15 label.pack()
    16 
    17 def func(event):
    18     print("event.char=", event.char)
    19     print("event.keycode=", event.keycode)
    20 
    21 
    22 win.bind("<Control-Alt-a>", func) # 注意前面改成了win,只需要写出按键名即可
    23 
    24 
    25 win.mainloop()

    作者:渔单渠
    出处:https://www.cnblogs.com/yudanqu/

     
    进群:834179111 免费领取Python的学习资料

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 16,879
精华内容 6,751
关键字:

tkinter