APP下载

基于Python 语言图形用户界面设计的研究

2022-12-05周春吟

科学技术创新 2022年35期
关键词:文本框窗体对话框

周春吟

(三亚城市职业学院,海南 三亚 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]。

猜你喜欢

文本框窗体对话框
巧用文本框实现PPT多图片排版
正常恢复虚拟机
PPT文本框的另类应用
试谈Access 2007数据库在林业档案管理中的应用
Bootlace Worms’Secret etc.
文本框酷变3D效果
基于LayeredWindow的异形窗体局部刷新
巧设WPS窗体控件让表格填写更规范
快速抓取对话框中的完整信息
文本框在地理课件中的应用