图形界面设计——猜数字游戏

开发工具:Visual Studio Codepython

1.游戏介绍canvas

在游戏中,程序随机生成1024之内的数字,再让玩家去猜,若是猜的数字过大太小都会进行提示,程序还会统计玩家猜的次数。使用Tkinter开发猜数字游戏小程序

2.python图形界面设计框架

Python提供了多个图形开发界面的库,几个经常使用Python GUI库以下。dom

Tkinter: Tkinter模块(TK接口)是Python的标准Tk GUI工具包的接口。Tkinter能够在大多数的UNIX平台下使用,一样能够应用在Windows和Macintosh系统里。Tk 8.0的后续版本能够实现本地窗口风格,并良好地运行在绝大多数平台中。函数

vxPython: wxPython是一款开源软件,是Python语言的一套优秀的GUI图形库,容许用户方便地建立完整的、功能健全的GUI用户界面。工具

Jython: Jython程序能够与Java无缝集成。除了一些标准模块外,Jython使用Java的模块,Jython几乎拥有标准的Python中不依赖于C语言的所有模块。好比,Jython的用户界面使用Swing、AWT或者SWT呈现。Jython能够被动态或静态地编译成Java字节码。oop

Tkinter是Python的标准GUI库。因为Tkinter内置在Python的安装包中,所以,只要安装好Python就能导入Tkinter库,并且IDLE也是用Tkinter编写而成。对于简单的图形界面Tkinter能应付自如,使用Tkinter能够快速地建立GUI应用程序。布局

建立Windows窗口开发工具

几何布局管理器

Tkinter几何布局管理器(Geometry Manager)用于组织和管理父组件(每每是窗口)扣子组件的布局方式。Tkinter提供了三种风格的几何布局管理类:pack、grid和place。

pack几何布局管理器

pack几何布局管理器采用块的方式组织组件。pack布局可根据子组件建立生成的顺序,将其放在快速生成界面的设计中,所以被普遍采用。调用子组件的方法pack(),则该子组件在其父组件中采用pack布局:

pack(  option  = value,…  )

grid几何布局管理器

grid几何布局管理器采用表格结构组织组件。子组件的位置由行/列肯定的单元格决定,子组件能够跨越多行/列。在每一列中,列宽由这一列中最宽的单元格肯定。采用grid布局,适合于表格形式的布局,能够实现复杂的界面,于是被普遍采用。调用子组件的grid()方法,则该子组件在其父组件中采用grid布局:

grid  (  option  =  value,…  )

grid()方法中两个最为重要的参数,一个是row,另外一个是column。它们可用来指定将子组件放置到什么位置,若是不指定row,则会将子组件放置到第一个可用的行上;若是不指定column,则使用第0列(首列)。

place几何布局管理器

place几何布局管理器容许开发者指定组件的大小与位置。place的优势是能够精确控制组件的位置;缺点是改变窗口大小时,子组件不能随之灵活改变大小。

调用子组件的方法place(),则该子组件在其父组件中采用place布局:

place  (   option  =  value,…  )

Tkinter组件

Tkinter提供各类组件(控件),如按钮、标签和文本框,可在一个GUI应用程序中使,。这些组件一般被称为控件或者部件。

标签( Label)组件

L曲el组件用于在窗口中显示文本或位图。Anchor属性指定文本(text)或图像( bitmap/image)在Label中的显示位置

按钮( Button)组件

Button组件(控件)是一个标准的Tkinter部件,用于实现各类按钮功能。按钮能够包含文本或图像,能够经过command属性将调用Python函数或方法关联到按钮上。当这些按钮被按下时,就会自动调用该函数或方法。

单行文本框( Entry)组件和多行文本框(Text)组件

单行文本框组件主要用于输入单行内容和显示文本,能够方便地向程序传递用户参数。这里经过一个转换摄氏度和华氏度的小程序来演示该组件的使用方法。

建立和显示Entry对象

建立Entry对象的基本方法以下:

Entry对象=Entry  (Windows窗口对象)

显示Entry对象的方法以下:

Entry对象.pack()

获取Entry组件的内容

其中,get()方法用于获取单行文本框内输入的内容。

设置或者获取单行文本框组件的内容也可使用StringVar()对象来完成,把单行文本框组件的textvariable属性设置为StringVar()变量,再经过StringVar()变量的get()和set()函数能够读取和输出相应文本内容。

单行文本框组件的经常使用属性

show:若是设置为字符*,则输入文本框内显示为*,用于密码输入。

insertbackground:插入光标的颜色,默认为黑色'black,。

selectbackground和selectforeground:选中文本的背景色与前景色。

width:组件的宽度(所占字符个数)。

fg:字体前景颜色。

bg:背景颜色。

state:设置组件状态,默认为normal,可设置为 disabled禁用组件,readonly只读。

一样地,Python提供输入多行文本框组件,用于输入多行内容和显示文本。使用方法相似于单行文本框组件,

**列表框( Listbox)组件 **

列表框( Listbox)组件可用于显示多个项目,而且容许用户选择一个或多个项目。

(1)建立和显示Listbox对象

Listbox对象=  Listbox  (Tkinter Windows窗口对象)

显示Listbox对象的方法以下:

Listbox对象.pack()

(2)插入文本项

可使用insert()方法向列表框组件中插入文本项,方法以下:

Listbox对象.insert (index,item)

其中: index是插入文本项的位置,若是在尾部插入文本项,则可使用END;若是在当前选中处插入文本项,则可使用ACTIVE。Item是要插入的文本项。

(3)返回选中项索引

Listbox对象.curselection()

返回当前选中项目的索引,结果为元组。

注意:索引号从0开始,0表示第一项。

(4)删除文本项

Listbox对象.delete( first,last)

删除指定范围(first,last)的项目,不指定last时,删除一个项目。

(5)获取项目内容

Listbox对象.get( first, last)

返回指定范围(first,last)的项目,不指定last时,仅返回一个项目。

(6)获取项目个数

Listbox对象.size()

(7)获取Listbox内容

须要使用listvariable属性为Listbox对象指定一个对应的变量,

单选按钮( Radiobutton)组件和复选框(Checkbutton)组件

单选按钮和复选框分别用于实现选项的单选和复选功能。Radiobutton组件用于在同一组单选按钮中选择一个单选按钮(不能同时选定多个)。Checkbutton组件用于选择一项或多项。

(1)建立和显示Radiobutton对象

建立Radiobutton对象的基本方法以下:

Radiobutton对象  =  Radiobutton(Windows窗口对象,text  =  Radiobutton组件显示的文本)

显示Radiobutton对象的方法以下:

Radiobutton对象.pack()

可使用variable属性为Radiobutton组件指定一个对应的变量。若是将多个Radiobutton组件绑定到同一个变量,则这些Radiobutton组件属于同一个分组。分组后须要使用value设置每一个Radiobutton组件的值,以标识该项目是否被选中。

(2) Radiobutton组件经常使用属性

variable:单选按钮索引变量,经过变量的值肯定哪一个单选按钮被选中。一组单选按钮使用同一个索引变量。

value:单选按钮选中时变量的值。

command:单选按钮选中时执行的命令(函数)。

(3) Radiobutton组件的方法

deselect():取消选择。

select():选择。

invoke():调用单选按钮command指定的回调函数。

(4)建立和显示Checkbutton对象

建立Checkbutton对象的基本方法以下:

Checkbutton对象=Checkbutton(Tkinter Windows窗口对象,text= Checkbutton组件显示的文本,command=单击Checkbutton按钮所调用的回调函数)

显示Checkbutton对象的方法以下:

Checkbutton对象.pack()

(5)Checkbutton组件经常使用属性

variable:复选框索引变量,经过变量的值肯定哪些复选框被选中。每一个复选框使用不一样的变量,复选框之间相互独立。

onvalue:复选框选中(有效)时变量的值。

offvalue:复选框未选中(无效)时变量的值。

command:复选框选中时执行的命令(函数)。

(6)获取Checkbutton状态

为了弄清楚Checkbutton组件是否被选中,须要使用variable属性为Checkbutton组件指定一个对应变量,

6.菜单(Menu)组件

图形用户界面应用程序一般提供菜单,菜单包含各类按照主题分组的基本命令。图形用户界面应用程序包括以下两种类型的菜单。

主菜单:提供窗体的菜单系统。经过单击可显示下拉子菜单,选择其中的命令可执行相关的操做,经常使用的主菜单一般包括:文件、编辑、视图、帮助等。

上下文菜单(也称为快捷菜单):经过右击某对象而弹出的菜单,通常为与该对象相关的经常使用菜单命令,例如,剪切、复制、粘贴等。

建立Menu对象的基本方法以下:

Menu对象- Menu(Windows窗口对象)

将Menu对象显示在窗口中的方法以下:

Windows窗口对象[,menu’)  =Menu对象

Windows窗口对象.mainloop()

消息窗口( Messagebox)组件

消息窗口( Messagebox)用于弹出提示框向用户进行告警,或让用户选择下一步的做。消息框包括不少类型,经常使用的有info、warning、error、yesno、okcancel等,包含不一样的图标、按钮以及弹出提示音。

框架( Frame)组件

Frame组件是框架组件,在进行分组组织其余组件的过程当中很是重要,负责安排Frame组件是框架组件,在进行分组组织其余组件的也程个很是亘妥,负贡安排容器。

(1)建立和显示Frame对象

建立Frame对象的基本方法以下:

Frame对象- Frame  (窗口对象,  height=高度,width拿宽度,bg=背景色,  …)

例如,建立一个Frame对象,设置其高为100、宽为400,背景色为绿色。方法以下:

 f1= Frame ( root,   height=  100,width=400,bg='green')

显示frame对象的方法以下

Frame对象.pack()

(2)向Frame组件中添加组件

在建立组件时能够指定其容器为Frame组件便可  俩呦i

Label(Frame对象+text  =   'Hello,).pack()    静向Frame组件添加一个Label组件

(3) LabelFrame组件

LabelFrame组件是有标题的Frame组件,可使用text属性设置LabelFrame组件的标题,方法以下:

Labelframe(窗口对象,  height=高度,width=宽度,text=标题).pack()

(4)刷新Frame

用Py也on制做GUI图形界面,可使用after()方法每隔几秒刷新GUI图形界面。

Tkinter字体

经过组件的font属性,能够设置其显示文本的字体。设置组件字体前首先要能表示一个字体

经过元组表示字体

经过三个元素的元组,能够表示字体:

(font  family, size,modifiers)

元素font family是字体名;size为字体大小,单位为point; modifiers为包含粗体、斜体、下画线的样式修饰符。

经过Font对象表示字体

可使用tkFont.Font来建立字体。格式以下:

ft  =  tkFont.Font (family  = '字体名',size,weight  , slant,underline,overstrike)

其中:  size为字体大小;weight='bold'或'normal','bold'为粗体; slant='italic'或'normal’,italic为斜体;underline=1或0,1为下画线;overstrike=1或0,1为删除线。

Python事件处理

事件( Event)就是程序中发生的事,例如,用户敲击键盘上的某一个键或单击、移动鼠标。对于这些事件,程序须要作出反应。Tkinter提供的组件一般都有本身能够识别的事件,例如,当按钮被单击时执行特定的操做或当一个输入栏成为焦点,而用户又敲击了键盘上的某些按键,用户所输入的内容就会显示在输入栏内。

程序可使用事件处理函数来指定当触发某个事件时所作的反应(操做)。

1.事件类型

事件类型的通用格式:

< [modifier- ] ...type [ -detail] >

事件类型必须放置于尖括号◇内。type描述了类型,例如,键盘按键、鼠标单击。

modifier用于组合键定义,如Control、Alt。detail用于明肯定义是哪个键或按钮modifier用于组合键定义,如Control、Alt。detail用于明肯定义是哪个键或按钮的事件,例如,1表示鼠标左键,2表示鼠标中键,3表示鼠标右键。

Python中事件主要有:键盘事件、鼠标事件、窗体事件

事件绑定

程序创建一个处理某一事件的事件处理函数,称之为绑定。

(1)建立组件对象时绑定

建立组件对象实例时,可经过其命名参数command绑定事件处理函数。例如:

(2)实例绑定

调用组件对象实例方法bind()可为指定组件实例绑定事件,这是最经常使用的事件绑定方式。

组件对象实例名.bind,”<事件类型>”,事件处理函数)

假设声明了一个名为canvas的Canvas组件对象,若要在canvas上按下鼠标左键时绘制一条线,能够这样实现:

canvas.bind( "<Button-l>",drawline)

其中,bind()函数的第一个参数是事件描述符,指定不管何时在canvas上,当具甲,bind()函数的第一个参数是事件描述符,指定不管什么时快隹canvas上,当按下鼠标左键时就调用事件处理函数drawline进行绘制线条的任务。特别须要注意的是: drawline后面的圆括号是省略的,Tkinter会将此函数填入相关参数后调用运行,在这里只是声明而已。

标识绑定

在Canvas画布中绘制各类图形,将图形与事件绑定可使用标识绑定tag_bind()函数。预先为图形定义标识tag后,再经过标识tag来绑定事件。

事件处理函数

(1)定义事件处理函数

事件处理函数每每带有一个event参数。触发事件调用事件处理函数时,将传递Event对象实例。

(2) Event事件处理参数属性

能够获取Event对象实例的各类相关参数,Event事件对象的主要参数属性如表

3.程序设计步骤

在猜数字游戏程序中导入相关模块:

random.randint(0,1024)随机产生玩家要猜的数字。

猜按钮事件函数从单行文本框entry_a获取猜的数字并转换成数字val a,而后判断是否正确,并根据要猜的数字number判断数字是过大仍是太小。

HumGuess()函数修改提示标签文字来显示猜的次数。

关闭按钮事件函数实现窗体关闭。

如下主程序实现游戏的窗体界面。

4.参考代码

5.运行结果

相关文章
相关标签/搜索