教你用 Python 玩 GUI 猜数字游戏 。

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

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


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


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


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

pip install Tkinter

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

# 导入使用的GUI模块 Tkinter
# 创建GUI的主要应用程序入口
# 添加控件并设置相应的属性
# 编写触发事件响应代码

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

from tkinter import *
root = Tk()
root.mainloop()

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

33.jpg


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

from tkinter import * 
root = Tk()
root['background'] = 'yellow'
root['height'] = 330
root['width'] = 450
root['cursor'] = 'coffee_mug'
root.title('我的第一个窗口程序')
root.resizable(False,False)
root.mainloop()

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

35.jpg


添加控件

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

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"

36.jpg


编写触发事件响应代码

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

from tkinter import *
root = Tk(className="事件处理实例") # 初始化窗口信息
def click(event): # 定义点击事件
    print("鼠标当前位置是[{0},{1}]".format(event.x,event.y))
def keyPress(event): # 定义按键事件
    print("按下了{0}键".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()

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

37.jpg


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

from tkinter import *
import random
number = random.randint(100,999)
num = 0
maxnum = 999
minnum = 100
running = True

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

def btnCloseClick(event):
    root.destory()

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

def btnResetClick(event):
    global number # 引用外部变量
    global running # 引用外部变量
    global num # 引用外部变量
    global maxnum # 引用外部变量
    global minnum # 引用外部变量
    number = random.randint(100,999) # 重新赋值
    running = True # 重新赋值
    num = 0 # 重新赋值
    labelChange("请输入100到999之间任意整数:")
    entry_num.delete(0,'end') 
    labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))
    print(number)

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

def btnGuessClick(event):
    global num
    global running
    global maxnum
    global minnum
    if running:
        answer = int(entry_num.get())
        if answer == number:
            labelChange("恭喜答对了!")
            num+=1
            running = False
            numGuess()
        elif answer < number:
            num+=1
            labelChange("小了哦")
            if answer>minnum:
                minnum=answer  
        else:
            num+=1
            labelChange("大了哦")
            if answer<maxnum:
                maxnum=answer
        labelRange('目前的范围是[%d,%d]'%(minnum,maxnum))         
    else:
        labelChange('你已经答对啦.')

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

def numGuess():
    if num == 1:
        labelChange('好棒!一次答对!')
    elif num < 9:
        labelChange('好厉害,尝试次数:'+str(num))
    elif num < 19:
        labelChange('还行,尝试次数:'+str(num))
    else:
        labelChange('您都试了超过20次了。。。。尝试次数:'+str(num))
def labelChange(vText): # 定义控件信息修改函数
    label_info.config(label_info,text=vText)
def labelRange(cText): 
    label_range.config(label_range,text=cText) 

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

41.jpg


总结

  • 妈妈终于不用担心我玩游戏了
  • 导入使用的GUI模块 Tkinter
  • 创建GUI的主要应用程序入口
  • 添加控件并设置相应的属性
  • 编写触发事件响应代码
  • 如果感兴趣 ,可以试试手写二分查找法噢
相关文章
|
24天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
76 7
|
1月前
|
IDE 开发工具 Python
Python扑克游戏编程---摸大点
Python扑克游戏编程---摸大点
|
1月前
|
Linux Android开发 开发者
【Python】GUI:Kivy库环境安装与示例
这篇文章介绍了 Kivy 库的安装与使用示例。Kivy 是一个开源的 Python 库,支持多平台开发,适用于多点触控应用。文章详细说明了 Kivy 的主要特点、环境安装方法,并提供了两个示例:一个简单的 Hello World 应用和一个 BMI 计算器界面。
59 0
|
1月前
|
机器学习/深度学习 算法框架/工具 Python
基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)
基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)
74 0
|
2月前
|
Python
python编写下象棋游戏|4-14
python编写下象棋游戏|4-14
|
2月前
|
人工智能 算法 图形学
总有一个是你想要的分享40个Python游戏源代码
这是一系列基于Python开发的游戏项目集合,包括中国象棋、麻将、足球、坦克大战、扑克等多种类型游戏,运用了Pygame等库实现图形界面与AI算法。此外还包含迷宫、数独、推箱子等益智游戏及经典游戏如《仙剑奇侠传二战棋版》和《星露谷物语》的Python版本,适合编程学习与娱乐。
118 11
|
1月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
73 0
|
2月前
|
消息中间件 数据采集 数据库
庆祝吧!Python IPC让进程间的合作,比团队游戏还默契
【9月更文挑战第7天】在这个数字化时代,软件系统日益复杂,单进程已难以高效处理海量数据。Python IPC(进程间通信)技术应运而生,使多进程协作如同训练有素的电竞战队般默契。通过`multiprocessing`模块中的Pipe等功能,进程间可以直接传递数据,无需依赖低效的文件共享或数据库读写。此外,Python IPC还提供了消息队列、共享内存和套接字等多种机制,适用于不同场景,使进程间的合作更加高效、精准。这一技术革新让开发者能轻松应对复杂挑战,构建更健壮的软件系统。
38 1
|
3月前
|
机器学习/深度学习 存储 定位技术
强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学
本文是关于使用Pygame库开发Python贪吃蛇游戏的实战教学,介绍了Pygame的基本使用、窗口初始化、事件处理、键盘控制移动、以及实现游戏逻辑和对象交互的方法。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--游戏生成技术
游戏生成技术,特别是生成式人工智能(Generative Artificial Intelligence, 简称Generative AI),正逐步革新游戏开发的多个层面,从内容创作到体验设计。这些技术主要利用机器学习、深度学习以及程序化内容生成(Procedural Content Generation, PCG)来自动创造游戏内的各种元素,显著提高了开发效率、丰富了游戏内容并增强了玩家体验。以下是生成式AI在游戏开发中的几个关键应用场景概述
77 2
下一篇
无影云桌面