【Python初学】GUI猜数游戏+打包(生成.exe可执行程序)
2017-05-09 12:03
471 查看
Python初学——GUI猜数游戏
对于像我一样的Python初学者,做练习总是像学C一样从命令窗口输出我们的程序,但是这样子很无聊,不会变着花样来。所以我在做Python练习时候,练习了一些有游戏题目,但都是命令窗口式的游戏,所以我就想把这种游戏图形化出来,不单单是输入输出!所以我们从Python最基础的猜数游戏开始Python猜数游戏
猜数游戏,就是让电脑随机给出一个数字,然后让玩家去猜这个数字,所以游戏的主体就是两个部分:1、生成随机数
import random a = int(random.randrange(1, 100))
2、二分法做判断
if(_number > a): print('请输入一个小一点的数字!') elif(_number < a): print('请输入一个大一点的数字!') else: print('恭喜你,猜对啦!')
而把它们相连接的是: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))
以上是博主做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()
注:EnterClick与onclick内容是一样的,只是用在不同的地方,所以代码不是那么多。
程序分析
程序方法:Restart:生成随机数,方便循环调用,主要用于重新开始游戏;
EnterClick:用于键盘触发事件,即:按下回车键所触发的事件;
onclick:用于按钮的事件,同上;
GUI主干:
创建一个APP的窗口
root = Tk() //调用Tk(),可以理解为创建个App root.title("GuessNumber")
Entry主要用来接收用户输入,如果想得到用户输入的字符,添加参数textvariable 。
num = StringVar() //引用textvariable ,必须先定义StringVar() E1 = Entry(root,width = 5,textvariable = num,font=("", 40)) b = num.set('')
Label用于创建标签,这里用作反馈用户的显示窗口。
var = StringVar() label = Label( root, textvariable=var,bg = 'red',width = 50,font=("", 20)) var.set("从1-100中随机选择一个数字,请你猜测这个数字是多少?")
触发事件:
a = E1.get() //获取用户输入内容 isNum = a.isdigit() //判断用户输入的是数字还是字符 print(isNum) //写程序是做bug调试用 b = num.set('') //置空Enter内容
添加按钮Button:
button = Button(root,text = "输入",font=("", 25),command =lambda:onclick()) button.pack(side = BOTTOM)
参数第一项root指的是父窗口;
command指的是点击按钮执行的内容,这里指向onclick方法;
设置键盘事件:
E1.bind('<Return>',EnterClick)
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()
pack()函数用于显示,总之需要显示的东西都pack;
side参数指向位置,具体参数查文档;
传送门:Tkinter文档
程序打包,生成可执行.exe文件
Python插件提供打包功能,首先尝试的是py2exe,但打包时有bug,无法修复,查资料发现py2exe以及年久失修了,所以不要用博主用的Pyinstaller,一键打包。具体执行方式:
打开终端,切换Python文件目录,执行:
pyinstaller -F -w -i main.py
我的程序文件名为CSDN.py,所以执行:
pyinstaller -F -w CSDN.py
参数 | 用途 |
---|---|
-F | 表示生成单个可执行文件 |
-w | 表示去掉控制台窗口,这在GUI界面时非常有用。 |
-p | 表示你自己自定义需要加载的类路径,一般情况下用不到 |
-i | 表示可执行文件的图标 |
如果不设置-F,会生成一个程序集。
传送门:pyinstaller详细教程
最后的最后:
献上源码和.exe程序(虽然不知道为什么这么做=.=)
相关文章推荐
- python3.6版本生成的python脚本如何打包为可独立执行的exe程序
- py2exe打包python文件成可执行程序
- VB.Net程序打包成可执行的.exe程序
- 用freeze.py打包python程序成可执行程序(linux)
- windows下使用cx_freeze将Python程序打包成exe可执行文件
- 转变思维--使用Python生成Shell命令,批量执行程序
- 将Python程序打包为Windows可执行文件格式
- 如何将VB.NET程序打包成可执行的.exe程序
- MyEclipse打包Jar包及生成.exe可执行文件
- 用Python3.4.2+cx_Freeze4.3.3(cxfreeze)编写、打包Linux可执行程序
- 使用 pyinstaller 打包 Python 程序为可执行文件
- Python:程序发布方式简介一(打包为可执行文件EXE)
- windows下为Python脚本生成单独可执行程序的脚本(不用为每个脚本写setup.py了)
- 用Python3.4.2+cx_Freeze4.3.3(cxfreeze)编写、打包Linux可执行程序
- 将Python程序打包成可执行文件
- Python:程序发布方式简介一(打包为可执行文件EXE)
- python程序打包成可执行程序
- 利用PyInstaller把Python程序打包成exe可执行文件
- shell脚本利用Here Document ,打包C的源码并编译生成再执行。shell携代攻击程序
- 在WINDOWS上将Python 文件转为(生成)可执行程序 exe 文件