窗体

窗体是一个容器对象,可以包含其他各种控件,并与这些控件一起组成程序界面。一个标准工程的界面中必须至少包含一个窗体。

创建窗体

下面介绍使用Excel VBA和Python Tkinter创建窗体的方法。

【Excel VBA】

打开Excel后,单击“开发工具”功能区中的“Visual Basic”按钮,打开Excel VBA编程环境。如果没有找到“开发工具”功能区,请先参照1.2.1小节的介绍加载该功能区。

Document Image

图2-1 用Excel VBA创建窗体

在Excel VBA编程环境中,在“插入”菜单中单击“用户窗体”选项,添加一个名为UserForm1的窗体如图2-1所示。同时显示一个“工具箱”浮动窗口,提供向窗体添加控件的各种按钮。关于控件,下一节进行详细介绍。左下角窗口为属性窗口,窗体被选中时,属性窗口中显示的就是窗体的各种属性和它们的值。双击窗体进入代码编辑窗口。

【Python】

在Python中用Tkinter创建窗体,打开Python IDLE后在Python Shell窗口输入命令行:

code.python
>>> from tkinter import *
>>> form = Tk()  #创建窗体

创建默认窗体如图2-2所示。

Document Image

图2-2 用Python Tkinter创建的默认窗体

窗体的主要属性、方法和事件

创建窗体后,通过设置属性可以改变它们的外观,使用方法可以进行各种操作,通过事件可以对第三方动作作出响应。

【Excel VBA】

Excel VBA中,在属性窗口中可以查看窗体的主要属性,窗体的主要成员包括:

Left, Top, Width和Height属性 窗体左上角的横坐标、纵坐标、窗体宽度和高度。

BackColor和ForeColor属性 设置窗体的背景色和前景色。

BorderStyle属性 确定窗体边框的类型。

Caption属性 设置窗体的标题。

Picture属性 在窗体上显示图像。

Excel VBA中,给窗体设置属性有两种方法,一种是在设计阶段进行设置,称为设计时;另一种是在程序运行阶段通过代码进行设置,称为运行时。

设计时是选择窗体后,在界面左下角的属性窗口中直接输入指定属性的值,例如指定BackColor属性的值为黄色。运行时则使用代码进行设置,例如,下面的代码在激活窗体时将窗体背景色修改为黄色。

code.vba
Private Sub UserForm_Activate()
  Me.BackColor = RGB(255, 255, 0)
End Sub

窗体的主要方法有:

Show方法 显示窗体。

Move方法 移动窗体。常用于改变窗体的大小,此时比直接使用Left,Top,Width,Height等属性要快一些。

窗体的主要事件有:

Activate事件 激活窗体时触发。

Click事件 单击窗体时触发。

Resize事件 改变窗体的大小时触发。

MouseDown, MouseMove和MouseUp事件 鼠标在窗体上按下、移动和弹起时触发。

例如上面的UserForm_Activate过程定义激活窗体这个事件发生时,将窗体背景色修改为黄色。

【Python】

在Python Tkinter中设置窗体的属性,首先创建窗体对象form:

code.python
>>> from tkinter import *
>>> form=Tk()

用窗体对象的keys方法可以获取该对象的所有属性,即

code.python
>>> form.keys()
['bd', 'borderwidth', 'class', 'menu', 'relief', 'screen', 'use', 'background', 'bg', 'colormap', 'container', 'cursor', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'padx', 'pady', 'takefocus', 'visual', 'width']

Tkinter中设置窗体属性的值主要有下面几种方法。

第1种方法是使用窗体对象的config方法,可以一次设置一个或多个属性的值。

例如,下面将窗体的背景色设置为黄色,将窗体的宽度设置为300。

code.python
>>> form.config(background='yellow',width=300)

注意属性名称不要加引号。

第2种方法是使用字典的方式进行设置,一次只能设置一个属性的值。

例如下面将窗体的背景色设置为绿色。

code.python
>>> form['background']='green'

使用窗体对象的attributes方法可以设置部分特殊的属性,如alpha(透明度),disabled(不可用),fullscreen(全屏显示),topmost(置顶显示)等,例如:

code.python
>>> form.attributes('-alpha',0.5)  #透明度,半透明
>>> form.attributes('-disabled';,False)  #可用
>>> form.attributes('-fullscreen';,False)  #不全屏显示
>>> form.attributes('-topmost';,False)  #不置顶显示

用窗体对象的geometry方法设置窗体的位置和大小。例如下面设置窗体左上角的横坐标为200,纵坐标为300,窗体宽度为400,高度为200。

code.python
>>> form.geometry('400x200+200+300')

设置窗体的标题。

code.python
>>> form.title('大谦Excel')

获取属性的值也有几种方法。

用字典方式获取。例如

code.python
>>> form['background']
'green'

用窗体对象的cget方法获取。例如

code.python
>>> form.cget('background')
'green'

用窗体对象的attributes方法获取。例如

code.python
>>> form.attributes('-alpha')
0.5

获取窗体的位置和大小。

code.python
>>> form.winfo_x()  #窗体左上角在屏幕坐标系中的横坐标
125
>>> form.winfo_y()  #窗体左上角在屏幕坐标系中的纵坐标
125
>>> form.winfo_width()  #窗体的宽度
300
>>> form.winfo_height()  #窗体的高度
239

获取窗体的标题。

code.python
>>> form.title()
'大谦Excel'