当前位置:   article > 正文

【Python初学】GUI猜数游戏+打包(生成.exe可执行程序)_猜数字游戏 允许猜五次封装exe可执行文件

猜数字游戏 允许猜五次封装exe可执行文件

Python初学——GUI猜数游戏

对于像我一样的Python初学者,做练习总是像学C一样从命令窗口输出我们的程序,但是这样子很无聊,不会变着花样来。所以我在做Python练习时候,练习了一些有游戏题目,但都是命令窗口式的游戏,所以我就想把这种游戏图形化出来,不单单是输入输出!所以我们从Python最基础的猜数游戏开始

Python猜数游戏

猜数游戏,就是让电脑随机给出一个数字,然后让玩家去猜这个数字,所以游戏的主体就是两个部分:

1、生成随机数

import random
a = int(random.randrange(1, 100))
  • 1
  • 2

2、二分法做判断

if(_number > a):
    print('请输入一个小一点的数字!')
elif(_number < a):
    print('请输入一个大一点的数字!')
else:
    print('恭喜你,猜对啦!')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而把它们相连接的是:while循环,所以整体就是

import random

print('游戏介绍:电脑会从1-100中随机选择一个数字,请你猜测这个数字是多少?')
_isGame = input('是否(y/n)开始猜数游戏?')
a = int(random.randrange(1, 100))
while (_isGame == 'y'):
    _number = int(input('请输入你猜测的数字'))

    if(_number > a):
        print('请输入一个小一点的数字!')
    elif(_number < a):
        print('请输入一个大一点的数字!')
    else:
        print('恭喜你,猜对啦!')
        _isGame = input('是否(y/n)开始猜数游戏?')
        a = int(random.randrange(1, 100))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

以上是博主做Python 100中练习而来的。原文戳这里!


GUI+猜数游戏

下面我们开始使用Python的Tkinter来将游戏图形化:

#coding:utf-8
from tkinter import *
import random
import time

def ReStart():
    start = time.clock()
    global GameNumber
    GameNumber = random.randrange(1, 100)

ReStart()

root = Tk()
root.title("GuessNumber")

num = StringVar()
E1 = Entry(root,width = 5,textvariable = num,font=("", 40))
b = num.set('')

var = StringVar()
label = Label( root, textvariable=var,bg = 'red',width = 50,font=("", 20))
var.set("从1-100中随机选择一个数字,请你猜测这个数字是多少?")

def EnterClick(event):
    a = E1.get()
    isNum = a.isdigit()
    print(isNum)
    if isNum:
        number = int(a)
        if number > GameNumber:
            var.set("请输入小一点的数字" )
            b = num.set('')
        elif number < GameNumber:
            var.set("请输入大一点的数字" )
            b = num.set('')
        else:
            var.set("恭喜你,猜对了!是否继续游戏?(Y/N)")
            b = num.set('')
            end = time.clock()
    else:
        if a == 'y' or a == 'Y':
            ReStart()
            b = num.set('')
            var.set("从1-100中随机选择一个数字,请你猜测这个数字是多少?")
        elif a== 'n' or a =='N':
            root.destroy()
            b = num.set('')
        else:
            b = num.set('')

def onclick():
    a = E1.get()
    isNum = a.isdigit()
    print(isNum)
    if isNum:
        number = int(a)
        if number > GameNumber:
            var.set("请输入小一点的数字")
            b = num.set('')
        elif number < GameNumber:
            var.set("请输入大一点的数字")
            b = num.set('')
        else:
            var.set("恭喜你,猜对了!是否继续游戏?(Y/N)")
            b = num.set('')
    else:
        if a == 'y' or a == 'Y':
            ReStart()
            b = num.set('')
            var.set("从1-100中随机选择一个数字,请你猜测这个数字是多少?")
        elif a== 'n' or a =='N':
            root.destroy()
            b = num.set('')
        else:
            b = num.set('')

button = Button(root,text = "输入",font=("", 25),command =lambda:onclick())

E1.bind('<Return>',EnterClick)
button.pack(side = BOTTOM)

E1.pack(side = BOTTOM)
label.pack()
root.mainloop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

注:EnterClick与onclick内容是一样的,只是用在不同的地方,所以代码不是那么多。
程序运行图:


程序分析

程序方法:

  1. Restart:生成随机数,方便循环调用,主要用于重新开始游戏;
  2. EnterClick:用于键盘触发事件,即:按下回车键所触发的事件;
  3. onclick:用于按钮的事件,同上;

GUI主干:
创建一个APP的窗口

root = Tk()     //调用Tk(),可以理解为创建个App
root.title("GuessNumber")
  • 1
  • 2

Entry主要用来接收用户输入,如果想得到用户输入的字符,添加参数textvariable 。

num = StringVar()   //引用textvariable ,必须先定义StringVar()
E1 = Entry(root,width = 5,textvariable = num,font=("", 40))
b = num.set('')
  • 1
  • 2
  • 3

Label用于创建标签,这里用作反馈用户的显示窗口。

var = StringVar()
label = Label( root, textvariable=var,bg = 'red',width = 50,font=("", 20))
var.set("从1-100中随机选择一个数字,请你猜测这个数字是多少?")
  • 1
  • 2
  • 3

触发事件:

a = E1.get()            //获取用户输入内容
isNum = a.isdigit()     //判断用户输入的是数字还是字符
print(isNum)            //写程序是做bug调试用

b = num.set('')         //置空Enter内容
  • 1
  • 2
  • 3
  • 4
  • 5

添加按钮Button:

button = Button(root,text = "输入",font=("", 25),command =lambda:onclick())
button.pack(side = BOTTOM)
  • 1
  • 2
  1. 参数第一项root指的是父窗口;
  2. command指的是点击按钮执行的内容,这里指向onclick方法;

设置键盘事件:

E1.bind('<Return>',EnterClick)
  • 1

bing主要用于event,键盘事件触发,Return指的是回车键(博主在这里浪费很多时间,以为Enter是回车/(ㄒoㄒ)/~~),其实Enter指的是:
The mouse pointer entered the widget (this event doesn’t mean that the user pressed the Enter key!).
传送门:Events and Bindings

最后我们收工:

E1.pack(side = BOTTOM)
button.pack(side = BOTTOM)
label.pack()
root.mainloop()
  • 1
  • 2
  • 3
  • 4
  1. pack()函数用于显示,总之需要显示的东西都pack;
  2. side参数指向位置,具体参数查文档;
  3. 传送门:Tkinter文档

程序打包,生成可执行.exe文件

Python插件提供打包功能,首先尝试的是py2exe,但打包时有bug,无法修复,查资料发现py2exe以及年久失修了,所以不要用博主用的Pyinstaller,一键打包。


具体执行方式:
打开终端,切换Python文件目录,执行:

pyinstaller -F -w -i main.py  
  • 1

我的程序文件名为CSDN.py,所以执行:

pyinstaller -F -w CSDN.py
  • 1
  • 2
参数用途
-F表示生成单个可执行文件
-w表示去掉控制台窗口,这在GUI界面时非常有用。
-p表示你自己自定义需要加载的类路径,一般情况下用不到
-i表示可执行文件的图标

如果设置-F,会生成一个8m的.EXE可执行程序;
如果不设置-F,会生成一个程序集。
传送门:pyinstaller详细教程

最后的最后:
献上源码和.exe程序(虽然不知道为什么这么做=.=)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/233899?site
推荐阅读
相关标签
  

闽ICP备14008679号