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

丶灬走出姿态 提交于 2020-03-03 17:25:57

开发工具:Visual Studio Code

1.游戏介绍

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

2.python图形界面设计

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

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字节码。

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.运行结果

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!