python基础教程(第三版)学习笔记(十二)

第十二章 图形用户界面

12.1 创建 GUI 示例应用程序

编写一个简 单的程序,让用户能够编辑文本文件

这个微型文本编辑器的需求如下。

1、 让用户能够打开指定的文本文件。

2、 让用户能够编辑文本文件。

3、 让用户能够保存文本文件。

4、让用户能够退出。

编写GUI程序时,绘制其用户界面草图通常很有帮助。图12-1显示了一个可满足前述文本编 辑器需求的简单布局。

python基础教程(第三版)学习笔记(十二)

 

这些界面元素的用法如下。  在按钮左边的文本框中输入文件名,再单击Open按钮打开这个文件,它包含的文本将出 现在底部的文本框中。  在底部的大型文本框中,你可随心所欲地编辑文本。  要保存所做的修改,可单击Save按钮,这将把大型文本框的内容写入到顶部文本框指定 的文件中。  没有Quit(退出)按钮,用户只能使用默认Tkinter菜单中的Quit命令来退出程序。

12.1.1 初探

首先,必须导入tkinter。为保留其命名空间,同时减少输入量,可能需要将其重命名。

  import tkinter as tk 

要创建GUI,可创建一个将充当主窗口的*组件(控件)。为此,可实例化一个Tk对象。

  import tkinter as tk
  ​
  top=tk.Tk()
  ​
  top.mainloop()      #调用函数mainloop以进入Tkinter主事件循环

此时将出现一个窗口如下:

python基础教程(第三版)学习笔记(十二)

 

​ 图12-2

添加按钮:

  
  btn=tk.Button(top)

现在这个按钮是不可见的——你需要使用布局管理器(也叫几何体管理器)来告诉Tkinter 将它放在什么地方。

python基础教程(第三版)学习笔记(十二)

 

​ 图12-3

控件包含各种属性,我们可以使用它们来修改控件的外观和行为。

  
  btn['text']="点击我"

python基础教程(第三版)学习笔记(十二)

 

​ 图12-4

给按钮添加行为也非常简单。

  
  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  #
  import tkinter as tk
  ​
  top = tk.Tk()                              #创建主窗口
  top.title("第一个窗口")                    #主窗口标题
  top.geometry('500x200')                    #设置主窗口大小
  lab = tk.Label(top, text='')               #添加标签
  lab.pack()
  btn = tk.Button(top)                       #添加按钮
  btn.pack()
  btn['text'] = "这是按钮"                   #给btn按钮text属性赋值
  ​
  ​
  def click():                               #定义事件函数
      lab['text'] = "那是谁呀,按了按钮就没下文了?"
  ​
  ​
  btn['command'] = click                      #给btn按钮绑定事件
  ​
  top.mainloop()

 

python基础教程(第三版)学习笔记(十二)

​ 图12-5

12.1.2 布局

对控件调用方法pack时,将把控件放在其父控件(主控件)中。主窗口本身是一个Toplevel,也可以在主窗口外添加额外的窗口,可以把不同功能的控件分到不同窗口上,也可以用来当弹窗使用。像其它button、label这类的小控件,在创建时总需要传入一个窗口。

  
  second = tk.Toplevel(top)

python基础教程(第三版)学习笔记(十二)

​ 图12-6

给副窗口添加属性,并包含一个标签。

  
  second = tk.Toplevel(top)
  second.title("副窗口")
  sublab=tk.Label(second )
  sublab.pack()
  sublab['text']="这是一个在副窗口中的标签。"

python基础教程(第三版)学习笔记(十二)

​ 图12-7

(可能由于版本的不同,书中的一些代码不能实现,所以只能这样了。有些参数设定可以参见nkd50000 的博客小白学tkinter(常用参数大总结)。地址:https://blog.csdn.net/nkd50000/article/details/77322312

12.1.3 事件处理

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

  
  import tkinter as tk
  top = tk.Tk()                       #创建一个窗口
  def callback(event):                #定义事件
      print(event.x, event.y)         #获取鼠标左键点击的坐标,打印输出。
  ​
  top.bind('<Button-1>', callback)    #绑定事件,<Button-1>是使用鼠标左按钮(按钮1)单击的事件名称。
  top.mainloop()

事件的完整的清单可使用下面的命令来获取:

  
  import tkinter as tk
  help(tk.Tk.bind)

12.1.4 最终的程序

  
  from tkinter import *
  from tkinter.scrolledtext import ScrolledText
  def load():
   with open(filename.get()) as file:
      contents.delete('1.0', END)
   contents.insert(INSERT, file.read())
  def save():
   with open(filename.get(), 'w') as file:
      file.write(contents.get('1.0', END))
  top = Tk()
  top.title("简单文本编辑器")
  contents = ScrolledText()
  contents.pack(side=BOTTOM, expand=True, fill=BOTH)
  filename = Entry()
  filename.pack(side=LEFT, expand=True, fill=X)
  Button(text='打开', command=load).pack(side=LEFT)
  Button(text='保存', command=save).pack(side=LEFT)
  mainloop()

python基础教程(第三版)学习笔记(十二)

​ 图12-8

保存之后,会产生一个你好文件:

python基础教程(第三版)学习笔记(十二)

​ 图12-9

12.2 使用其他 GUI 工具包

python除内置的TkinterGUI包之外,还有很多的第三方GUI供选择,但每个包的功能虽然大同小异,其使用时的函数、参数及函数调用方法不尽相同,因此初学PythonGUI一要选对包,二要看参考手册甚至源代码等资料,三要勤奋。

(待续)