窗体是一个容器对象,可以包含其他各种控件,并与这些控件一起组成程序界面。一个标准工程的界面中必须至少包含一个窗体。
创建窗体
下面介绍使用Excel VBA和Python Tkinter创建窗体的方法。
【Excel VBA】
打开Excel后,单击“开发工具”功能区中的“Visual Basic”按钮,打开Excel VBA编程环境。如果没有找到“开发工具”功能区,请先参照1.2.1小节的介绍加载该功能区。
图2-1 用Excel VBA创建窗体
在Excel VBA编程环境中,在“插入”菜单中单击“用户窗体”选项,添加一个名为UserForm1的窗体如图2-1所示。同时显示一个“工具箱”浮动窗口,提供向窗体添加控件的各种按钮。关于控件,下一节进行详细介绍。左下角窗口为属性窗口,窗体被选中时,属性窗口中显示的就是窗体的各种属性和它们的值。双击窗体进入代码编辑窗口。
【Python】
在Python中用Tkinter创建窗体,打开Python IDLE后在Python Shell窗口输入命令行:
>>> from tkinter import *
>>> form = Tk() #创建窗体
创建默认窗体如图2-2所示。
图2-2 用Python Tkinter创建的默认窗体
窗体的主要属性、方法和事件
创建窗体后,通过设置属性可以改变它们的外观,使用方法可以进行各种操作,通过事件可以对第三方动作作出响应。
【Excel VBA】
Excel VBA中,在属性窗口中可以查看窗体的主要属性,窗体的主要成员包括:
Left, Top, Width和Height属性 窗体左上角的横坐标、纵坐标、窗体宽度和高度。
BackColor和ForeColor属性 设置窗体的背景色和前景色。
BorderStyle属性 确定窗体边框的类型。
Caption属性 设置窗体的标题。
Picture属性 在窗体上显示图像。
Excel VBA中,给窗体设置属性有两种方法,一种是在设计阶段进行设置,称为设计时;另一种是在程序运行阶段通过代码进行设置,称为运行时。
设计时是选择窗体后,在界面左下角的属性窗口中直接输入指定属性的值,例如指定BackColor属性的值为黄色。运行时则使用代码进行设置,例如,下面的代码在激活窗体时将窗体背景色修改为黄色。
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:
>>> from tkinter import *
>>> form=Tk()
用窗体对象的keys方法可以获取该对象的所有属性,即
>>> 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。
>>> form.config(background='yellow',width=300)
注意属性名称不要加引号。
第2种方法是使用字典的方式进行设置,一次只能设置一个属性的值。
例如下面将窗体的背景色设置为绿色。
>>> form['background']='green'
使用窗体对象的attributes方法可以设置部分特殊的属性,如alpha(透明度),disabled(不可用),fullscreen(全屏显示),topmost(置顶显示)等,例如:
>>> form.attributes('-alpha27;,0.5) #透明度,半透明
>>> form.attributes('-disabled';,False) #可用
>>> form.attributes('-fullscreen';,False) #不全屏显示
>>> form.attributes('-topmost';,False) #不置顶显示
用窗体对象的geometry方法设置窗体的位置和大小。例如下面设置窗体左上角的横坐标为200,纵坐标为300,窗体宽度为400,高度为200。
>>> form.geometry('400x200+200+300')
设置窗体的标题。
>>> form.title('大谦Excel')
获取属性的值也有几种方法。
用字典方式获取。例如
>>> form['background']
'green'
用窗体对象的cget方法获取。例如
>>> form.cget('background')
'green'
用窗体对象的attributes方法获取。例如
>>> form.attributes('-alpha')
0.5
获取窗体的位置和大小。
>>> form.winfo_x() #窗体左上角在屏幕坐标系中的横坐标
125
>>> form.winfo_y() #窗体左上角在屏幕坐标系中的纵坐标
125
>>> form.winfo_width() #窗体的宽度
300
>>> form.winfo_height() #窗体的高度
239
获取窗体的标题。
>>> form.title()
'大谦Excel'