欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python之GUI基础

程序员文章站 2022-04-11 17:28:14
...

图形用户界面(GUI)

- GUI就是包含按钮、文本框、等控件的窗口
- Tkinter是Python标准GUI工具包

初探

  • 导入tkinter以及这个模块的所有内容

      >>> import tkinter as tk
      >>> from tkinter import *
    
  • 创建一个充当主窗口的*组件(控件),实例化一个Tk对象

      >>> top = Tk()
    
  • 调用函数mainloop()进入Tkinter主事件循环,出现一个窗口

     >>> mainloop()
    

    python之GUI基础

  • 要创建按钮可以实例化Button类。如果没有Tk实例,创建控件也将
    实例化Tk,所以可以不先实例化Tk,而直接创建控件

      >>> btn = Button()
    
  • 创建的按钮是不可见的,需要使用布局管理器(也叫几何管理器)来告诉
    Tkinter将它放在什么地方。而pack正是这样的一个管理器

    	>>> btn.pack()
    
  • 控件包含各种属性,可以使用它们来修改控件的外观和行为

      >>> btn['text'] = 'Click me'	
    

    python之GUI基础

  • 给按钮添加行为,单击该按钮就会出现指定的打印消息

      >>> def clicked():
      	...     print('I was clicked!')
      	...
      	...
      	>>> btn['command'] = clicked
    
  • 可以分别给不同的属性赋值,使用方法config可以同时设置多个属性

  •   >>> btn.config(text='Click me!', command=clicked)
    
  • 还可以使用控件的构造函数来配置控件

      >>> Button(text='Clicked me!', command=clicked).pack()
    

布局

  • 对控件调用方法pack时,将把控件放在其父控件(主控件)中,要指定主控
    件,可使用构造函数的第一个可选参数;如果没有指定,将把*主窗口用作主控件

    	>>> Label(text="I'm in the first window").pack()
    	>>> second = Toplevel()
    	>>> Label(second, text="I'm in the second window").pack()
      # Toplevel表示除主窗口外的另一个*窗口,而Label就是文本标签
    
  • 没有提供任何参数时,pack从窗口顶部开始将控件堆叠成一列,并让他们在窗口
    中水平居中

      >>> for i in range(10):
      ...     Button(text=i).pack()
    

python之GUI基础

  • 但是控件的位置和拉伸方式是可以调整的。要指定将控件停靠在那一条边上,可将
    参数side设置为LEFT、RIGHT、TOP或BOTTOM。要让控件在x或y方向上填满分配
    给他的空间,可将参数fill设置为X、Y、或BOTH。要让控件随父控件(这里指窗
    口)一起增大,可将参数expand设置为True。还有其他的选项,可通过help

      >>> help(Pack.config)
    

事件处理

  • 可以通过设置属性command给按钮指定的动作(action)。这是一种特殊的事件处理
    但Tkinter还提供了更通用的事件处理机制:方法bind。要让事件对特定的事件进行
    处理,可对其调用方法bind,并将指定事件的名称和要使用的函数

      >>> from tkinter import *
      >>> top = Tk()
      >>> def callback(event):
      ...     print(event.x, event.y)
      ...
      >>> top.bind('<Button-1>', callback)
      '2208846659464callback'
    	# <Button-1>是使用鼠标左按钮单击的事件名称。我们将这种事件关联到函数
    	# callback。每当用户在窗口top中单击时,都将调用这个函数。
    	# 函数callback传递一个对象,这个对象包含的属性随事件类型而异