首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教你用 Python玩GUI 猜数字游戏

假设同学聚会玩个猜数字的小游戏 :在[100, 999] 区间内随机生成一个数字 ,之后在其中猜 ,每次猜数会给出指示 ,提示大了还是小了 。那么你要几次能够猜中呢 ?好吧 ,今天重点不是小詹教你二分查找 。而是读者来稿如下 :

小 A 最近考完试 ,甚是无聊啊 ,翻开书本学习了一下 GUI ,你肯定很是好奇啊,GUI是啥啊?一看英文G(鸡鸡,哦,当然不是啦,就是叼的意思啦) ,UI(就是界面的意思) 。合起来,叼界面,足够你去发挥你的想象力了,闭上眼睛,那个画面铺面而来啊,哈哈。

在 python 常用的库里有一个标准的 GUI 库 ,就是 Tkinter 。这是一个TkGUI工具包接口 。专门用于快速实现用于图形界面的一个标准模块 。

就像我们开车一样 ,首先要打开门 ,程序也一样要用到的库都需要提前安装

pipinstall Tkinter

同志们 ,接下来开车了 ,我们应该如何去创建一个 GUI 程序呢 ?不用急 ,代码步骤如下 :

# 导入使用的GUI模块 Tkinter

# 创建GUI的主要应用程序入口

# 添加控件并设置相应的属性

# 编写触发事件响应代码

接下来 Ken 就来带你撸一把 :导入使用的GUI模块 Tkinter ;创建GUI的主要应用程序入口 。简单粗暴的展示了一下最简单的界面 。

fromtkinterimport*

root = Tk()

root.mainloop()

意不意外,惊不惊喜,这么短短的三句代码,就能出现一个界面,是不是很刺激。

接下来就是 设置相应的属性

fromtkinterimport*

root = Tk()

root['background'] ='yellow'

root['height'] =330

root['width'] =450

root['cursor'] ='coffee_mug'

root.title('我的第一个窗口程序')

root.resizable(False,False)

root.mainloop()

程序运行之后 ,就会出现一坨黄黄的 ( 像极了粑粑 ) ,你懂的 。。

添加控件

我们为窗口添加一个控件 ,用于设置提示文本 。

from tkinter import *

root = Tk(className="登陆")

label1 = Label(root)

label1['text'] ="Hello World"

label2 = Label(root)

label2['text'] ="小詹学Python"

label1.pack()# label1显示出来

label2.pack()# label2显示出来

root.mainloop()

程序运行之后就会出现 "Hello World 小詹学Python"

编写触发事件响应代码

就像我们页面一样 ,要有点击功能 ,肯定要给页面按钮绑定点击事件 。我们也可以为键盘绑定事件 ,后面猜数字游戏会讲到 。

fromtkinterimport*

root = Tk(className="事件处理实例")# 初始化窗口信息

defclick(event):# 定义点击事件

print("鼠标当前位置是[,]".format(event.x,event.y))

defkeyPress(event):# 定义按键事件

print("按下了键".format(repr(event.char)))

frame = Frame(root,width=200,height=120)# 创建一个框架

frame.bind("",click)# 绑定左键点击事件

entry = Entry(root)# 添加文本框

entry.bind("",keyPress)# 文本框添加键盘处理事件

entry.pack()# 显示文本框

frame.pack()# 显示框架

root,mainloop()

是不是很有趣啊 ,看看下图 :

接下来分分钟带你搞定一个 GUI 数字游戏 ,首先我们当然是需要一个随机数的生成 ,也需要引入这个标准库 ,定义需要引用到的全局变量 ,以便后面的函数去使用 。

from tkinter import *

import random

number = random.randint(100,999)

num = 0

maxnum = 999

minnum = 100

running = True

接下来我们需要关闭窗口的事件 (destory) 。就像我们页面一样 ,按钮点击就可以把某个不需要显示的控件给关闭掉 。

defbtnCloseClick(event):

root.destory()

是不是很简单呢 ,就两行代码 ,就可以关闭窗口了 ,我们拭目以待吧 。除了关闭按钮之外 ,我们当然还需要一个重置窗口 。就像我们表单登录一样 ,重置密码 。

defbtnResetClick(event):

globalnumber# 引用外部变量

globalrunning# 引用外部变量

globalnum# 引用外部变量

globalmaxnum# 引用外部变量

globalminnum# 引用外部变量

number = random.randint(100,999)# 重新赋值

running =True# 重新赋值

num =# 重新赋值

labelChange("请输入100到999之间任意整数:")

entry_num.delete(,'end')

labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))

print(number)

我们要猜数字 ,当然需要一个文本框用来输入数字 ,然后确定 ,给出提示 。

defbtnGuessClick(event):

globalnum

globalrunning

globalmaxnum

globalminnum

ifrunning:

answer = int(entry_num.get())

ifanswer == number:

labelChange("恭喜答对了!")

num+=1

running =False

numGuess()

elifanswer

num+=1

labelChange("小了哦")

ifanswer>minnum:

minnum=answer

else:

num+=1

labelChange("大了哦")

ifanswer

maxnum=answer

labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))

else:

labelChange('你已经答对啦.')

最终我们才对了游戏的结果,我们还要给出信息提示:

defnumGuess():

ifnum ==1:

labelChange('好棒!一次答对!')

elifnum

labelChange('好厉害,尝试次数:'+str(num))

elifnum

labelChange('还行,尝试次数:'+str(num))

else:

labelChange('您都试了超过20次了。。。。尝试次数:'+str(num))

deflabelChange(vText):# 定义控件信息修改函数

label_info.config(label_info,text=vText)

deflabelRange(cText):

label_range.config(label_range,text=cText)

最终所有代码整合起来的结果,由程序运行如下

Python的爱好者社区历史文章大合集

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python的入门免费视频课程!

小编的Python的快速上手matplotlib可视化库!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告扩展制作免费学习视频。

玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。

爱我请给我好看!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190209B051MH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券