基于Python 语言图形用户界面设计的研究
2022-12-05周春吟
周春吟
(三亚城市职业学院,海南 三亚 572022)
1 Python 语言概述
Python 语言是一种解释型的高级程序设计语言[1]。由荷兰计算机科学家Guido van Rossum(吉多·范罗苏姆)于1989 年12 月开始设计并领导开发, 1990 年推出。2010 年,Python2.x 系列发布了最后一版,其主版本号为2.7,用于终结2.x 系列版本的发展,并且不再进行重大改进。2008 年12 月,Python3.0 正式发布。Python3.0版本在语法层面和解释器内部做了很多重大改进,解释器内部采用完全面向对象的方式实现。这些重要修改所付出的代价是3.x 系列版本代码无法向下兼容Python 2.0 系列的既有语法,因此,所有基于Python2.0 系列版本编写的库函数都必须修改后才能被Python3.0 系列解释器运行。“Python2.x 已经是遗产,Python3.x 是这个语言的现在和未来”。
2 Python 语言的特点
(1) 简单语法:与传统的C/C++、Java、C#等语言相比,Python 对代码格式的要求不那么严格,实现了相同的功能,Python 中的代码行数仅为其他语言的1/10~1/5[2]。这种松散性允许用户更轻松地编写代码,而无需在细节上花费太多精力。
(2) Python 是开源的:首先,程序员用Python 编写的代码是开源的。我们使用Python 开发系统。用户可以下载系统的源代码,并且可以随意修改。这也是解释型语言本身的特性,要运行程序,需要源代码。第二,Python解释器和模块的代码是正式开源的,希望用户能够参与其中,共同提高Python 的性能,弥补之前的漏洞。代码研究得越多,它就越强。
(3) 通用且灵活:Python 是一种通用编程语言,可用于编写各种领域的应用程序,这为该语法提供了广阔的应用空间。几乎所有类型的应用程序,从图像处理、科学计算、数据处理到人工智能、Python 语言都可以发挥重要作用[3]。
(4) Python 具有高度的可扩展性:Python 的可扩展性主要体现在模块上。Python 模块具有丰富的脚本语言和强大的库。这些库或模块涵盖了图形界面编程、网络编程和文件操作等应用场景。Python 中某些类库的底层代码不一定是Python,并且存在C/C++语言,当Python需要提高运行速度时,可以使用C/C++语言实现,Python将再次调用它们,Python 依靠其良好的可扩展性在一定程度上弥补了运行时效率的低下。
(5) 丰富的类库:Python 解释器提供了数百个内置类和函数库。此外,世界各地的程序员通过开源社区贡献了数十万个第三方函数库,几乎涵盖了计算机技术的所有领域,编写Python 程序可以充分利用现有的内置或第三方代码[4]。
3 基于Python 语言图形用户界面设计的研究
3.1 图形用户界面概述
3.1.1 常用设计图形界面的模
Python 有多种用于设计图形用户界面的模块,常用的模块有如下几种:
Tkinter:使用Tk 平台,Python 系统自带的标准图形用户界面库。
Wxpython:基于wxWindows,具有跨平台的特性。
PythonWin:只能在Windows 上使用,使用了本机的
Windows GUI 功能。
JavaSwing:只能用于Jython,使用本机的Java GUI。
PyGTK:使用GTK 平台,在linux 上很流行。
PyQt:使用Qt 平台,跨平台。
3.1.2 tkinter 模块
使用tkinter 模块的基本步骤如下:
(1) 导入tkinter 模块
例如:import tkinter 或from tkinter import *
(2) 创建一个顶层容器对象
例如:创建一个窗体对象: win = tkinter.Tk()(
3) 在顶层容器对象中,添加其它组件
(4) 调用pack()方法进行容器的区域布局
(5) 进入主事件循环:win.mainloop()
当容器进入主事件循环状态时,容器内部的其他图形对象则处于循环等待状态, 这样才能一直保持显示状态。
3.2 窗体容器和组件
3.2.1 窗体容器和标签组件
3.2.1.1 创建窗体
窗体是带有标题、边框的一个顶层容器,在其内部可以添加其它组件。
设计一个窗体的主要步骤如下:
(1) 导入tkinter 包:import tkinter
(2) 创建窗体对象:win = tkinter.Tk()
(3) 设置窗体初始的大小(宽×高)和位置(x, y):win.geometry(’宽×高+ x 坐标+ y 坐标’)
(4) 设置事件循环,使窗体一直保持显示状态:win. mainloop()
通过Tk 对象创建一个最简单窗体示例代码如下:
图1 创建窗体
3.2.1.2 使用标签
标签是用于窗体容器中显示文字内容的组件。标签的基本格式为:label = tkinter.Label (容器名称,显示文字或图像内容,显示位置, 文字字体、颜色等)标签应用示例代码如下:
3.2.1.3 按钮对象
创建按钮对象的方法为:Btn = tkinter.Button(容器,text ="按钮上的文字")由于按钮是一个普通组件,设计时必须放置到一个容器中,以下是设计一个按钮事件程序代码:
3.3 界面布局管理
Python 定义了3 种界面布局管理方式。
3.3.1 pack 布局
pack 布局管理方式按组件的创建顺序在容器区域中排列。
pack 的常用属性有side 和fill。
side 属性:其取值为’top’、’bottom’、’left’、’right’,分别表示组件排列在上、下、左、右的位置。默认为top。
fill 属性:其取值为’x’、’y’、’both’,分别表示填充x(水平)或y(垂直)方向的空间。
3.3.2 place 布局
place 布局管理方式为指定组件的坐标位置排列,这种排列方式又称为绝对布局。
3.3.3 grid 布局
grid 布局管理方式为网格布局,组件放置在二维表格的单元格中。
grid 布局的常用属性有:row(行)、column(列)、rowspan(组件占据行数)、columnspan(组件占据列数)。
3.4 文本框组件
文本框的格式
Python 中,文本框Entry 用于接收输入的数据。文本框Entry 的基本格式为:txt = tkinter.Entry (容器名称,width=宽度, 文字字体、颜色等)文本框中的内容设置及获取文本框Entry 中文字内容的操作可以使用StringVar()对象来完成。StringVar()是Tkinter 模块的对象,它可以跟踪变量值的变化,把最新的值显示到界面上。把Entry的textvariable 属性设置为StringVar(),再通过StringVar()的get()和set()函数读取和输出相应内容。这样,文本框中始终显示的值。运用文本框属性设计一个密码验证程序,编写程序代码如下:
登陆界面运行结果见图2。
图2 登陆界面运行结果
3.5 其它常用组件
3.5.1 单选按钮(Radiobutton)和复选框(Checkbutton)
单选按钮Radiobutton、复选框Checkbutton 是一组表示多种“选择”的组件。它们都只有两种状态:“选中/未选中”(ON/OFF),其属性和方法都类似,按钮的常用属性见表1。
表1 按钮的常用属性
在创建单选按钮Radiobutton 或复选框Checkbutton 时,要先声明一个选择状态变量:chVarDis = tk.Int-Var()
该变量记录单选按钮或复选框是否被勾选的状态,可以通过chVarDis.get()来获取其的状态,其状态值为int类型 勾选为1 未勾选为0。另外,复选框Checkbutton对象的select()方法表示勾选,deselect()方法表示不勾选。
3.5.2 标签框架、下拉列表框和滚动文本框
3.5.2.1 标签框架LabelFrame
标签框架LabelFrame 是一个带边框的容器,可以在该容器中放置其它组件。
标签框架LabelFrame 的构造方法为:
ttk.LabelFrame(上一级容器, text="标签显示的文字内容")
3.5.2.2 下拉列表Combobox
下拉列表Combobox 是常用的一种选值组件,使用下拉列表时要先声明一个取值变量:number = tk.StringVar()
该变量记录在下拉列表中预设的值中所选取的字符值,在下拉列表中所预设的值为一个元组。
下拉列表Combobox 的构造方法为:ttk.Combobox(容器, width=宽度, textvariable=取值变量)
3.5.2.3 滚动文本框scrolledtext
滚动文本框scrolledtext 是一个带滚动条的文本框,可以输入多行文本内容。其构造方法为:
scr = scrolledtext.ScrolledText(容器, width=文本框宽度, height=文本框高度)
3.6 菜单与对话框
3.6.1 菜单
创建菜单的主要步骤如下:
(1) 创建菜单条对象:menubar = Menu(窗体容器)
(2) 把菜单条放置到窗体中:窗体容器. config(menu = menubar)
(3) 在菜单条中创建菜单:菜单名称= Menu(menubar, tearoff = 0)
其中,tearoff 取值0 表示菜单不能独立使用。
(4) 为菜单添加文字标签
menubar.add_cascade(label = "文字标签", menu =菜单名称)
(5) 在菜单中添加菜单项
菜单名称.add_command (label = " 菜单项名称",command = 功能函数名)
3.6.2 对话框
Tkinter 提供了三种标准的对话框模块:
(1) 消息对话框messagebox
(2) 文件对话框filedialog
(3) 颜色选择对话框colorchooser
3.6.2.1 无返回值的消息对话框
消息对话框分为无返回值的对话框和有返回值的对话框,这二种消息对话框的导入模块语句都是一样的。
(1) 消息对话框的导入模块语句
(2) 消息提示框:tkinter.messagebox.showinfo (’提示’,’快乐每一天’)
3.6.2.2 有返回值的消息对话框
(1) askokcancel()
askokcancel()函数在对话框中显示“确定”和“取消”按钮,其返回值分别为“Ture”或“False”。
(2) askquestion()
askquestion()函数在对话框中显示“是”和“否”按钮,其返回值分别为“yes”或“no”。
3.6.2.3 文件对话框filedialog
(1) 导入文件对话框模块语句:import tkinter.filedialog
(2) 获取文件对话框返回值
文件对话框的返回值为文件路径和文件名。
文件对话框filedialog 应用代码如下:
3.6.2.4 颜色选择对话框colorchooser
colorchooser.askcolor()提供一个用户选择颜色的界面。其返回值是一个二元组,第1 个元素是选择的RGB颜色值,第2 个元素是对应的十六进制颜色值。
3.7 鼠标键盘事件
3.7.1 鼠标事件
在Pyton 中,tkinter 模块的事件event 都用字符串描述,格式为:组件对象.bind(event, handler)其中,event为事件,handler 为处理事件的函数。鼠标按钮的点击事件的一般格式为:<ButtonPress-n> 其中,n 为鼠标按钮,n 为1 代表左键,2 代表中键,3 代表右键。例如,<ButtonPress-1>, 表示按下鼠标的左键。(见表2)
表2 鼠标事件
可以通过鼠标事件event 来获得鼠标位置。坐标点(event.x,event.y)为发生事件时,鼠标所在的位置。
编写捕获鼠标点击事件的程序。当鼠标在窗体容器中点击时,记录下其坐标位置。
鼠标事件运行结果见图3。
图3 鼠标事件运行结果
3.7.2 键盘事件
表3 为方向键键值表。在捕获键盘事件时,先要用focus_set()方法把键盘的焦点设置到一个组件上,这样才能捕获到键盘事件,捕获键盘事件,在窗体中显示按下的键:键盘事件运行结果见图4。
表3 方向键键值表
图4 键盘事件运行结果
4 结论
为了促进学生更好、更直观地学习图形用户界面设计以及Python 的基本知识,设计实现一个所见即所得的用户界面,学生可以通过本研究学习,学会如何在用户和程序之间可以方便地进行交互,如何介绍设计友好的图形用户界面应用程序。尽管Python 在C/C++、Java、C#等语言当中是一种非常年轻的语言,但其强大的优势不容小觑。近几年来,Python 在编程领域,一直在稳步上升。相信Python 在未来会有更强的发展,并且很可能成为快速发展的主流语言[5]。