社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python爱好者社区 • 5 年前 • 654 次点击  

作者:  Ken
公众号:小詹学Python


假设同学聚会玩个猜数字的小游戏 :在[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()

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

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


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()

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

添加控件

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

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"

编写触发事件响应代码

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

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()

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

接下来分分钟带你搞定一个 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             num+=1
            labelChange("小了哦")
            if answer>minnum:
                minnum=answer  
        else:
            num+=1
            labelChange("大了哦")
            if answer                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) 

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

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

2018年Python爱好者社区历史文章合集(作者篇)

2018年Python爱好者社区历史文章合集(类型篇)

福利:文末扫码关注公众号,“Python爱好者社区”开始学习Python课程

关注后在公众号内回复“ 课程 ”即可获取:

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

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

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

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

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

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


爱我请给我好看!

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/2kW205CWdG
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28675
 
654 次点击