关于这篇文章所用到的tkinter组件知识和程序,以及该程序的背景图来源,我已经在文章末尾声明来源。
import random
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
import numpy as np
class Guess_Game(object):
def __init__(self):
#初始化主窗口
self.root=tkinter.Tk()
#设置窗口标题
self.root.title('猜数字游戏——Keep_Trying_Go')
#设置窗口大小
self.root.geometry('480x180+400+300')
#设置窗口为不允许改变大小
self.root.resizable(False,False)
try:
#创建画布
self.canvas=tkinter.Canvas(self.root,height=400,width=700,borderwidth=2)
#加载图片文件
self.image_file=tkinter.PhotoImage(file='Background.gif')
#将图像放置在画布上
self.image=self.canvas.create_image(0,0,anchor='nw',image=self.image_file)
#放置在画布上端,也就是主窗口的“前方”
self.canvas.pack(side='top')
except:
print('加载不出图片')
#用户猜的次数
self.varNumber=tkinter.StringVar(self.root,value='0')
#允许用户猜的次数
self.totalTimes=tkinter.IntVar(self.root,value=0)
#用户已经猜的次数
self.already=tkinter.IntVar(self.root,value=0)
#记录当前生成的随机数
self.currentNumber=tkinter.IntVar(self.root,value=0)
#记录玩家玩游戏的总次数
self.times=tkinter.IntVar(self.root,value=0)
#记录玩家猜对的总次数
self.right=tkinter.IntVar(self.root,value=0)
self.lb=tkinter.Label(self.root,text='请输入一个整数: ')
self.lb.place(x=70,y=50,width=100,height=30)
#用户猜的次数并输入文本框
self.entryNumber=tkinter.Entry(self.root,textvariable=self.varNumber)
self.entryNumber.place(x=170,y=50,width=150,height=30)
#游戏开始之后才允许输入数字
self.entryNumber['state']='disabled'
self.button=tkinter.Button(self.root,text='Start Game',command=self.buttonClick)
self.button.place(x=150,y=100,width=80,height=30)
#按钮单击事件处理函数
def closeWindows(self):
self.message='共玩游戏 {0}次,猜对 {1}次!\n欢迎下次再玩!'
self.message=self.message.format(self.times.get(),self.right.get())
tkinter.messagebox.showinfo('战绩',self.message)
def buttonClick(self):
if self.button['text']=='Start Game':
#每次游戏时允许用户自定义数值的范围
#玩家必须输入正确的数字
while True:
try:
#simpledialog模块参数:title指定对话框的标题;prompt 显示的文字;initialvalue 指定输入框的初始值;
self.start=tkinter.simpledialog.askinteger('允许的最小整数','最小数',initialvalue=1)
break
except:
pass
while True:
try:
self.end=tkinter.simpledialog.askinteger('允许的最大整数','最大数',initialvalue=10)
break
except:
pass
#在用户自定义的数值范围内生成随机数
self.currentNumber.set(random.randint(self.start,self.end))
#用户自定义一共允许猜的次数
#玩家必须输入正确的数字
while True:
try:
self.t=tkinter.simpledialog.askinteger('最多允许猜几次?','总次数',initialvalue=3)
self.totalTimes.set(self.t)
break
except:
pass
#已猜的次数初始化为0
self.already.set(0)
self.button['text']='剩余次数: '+str(self.t)
#将文本框初始化为0
self.varNumber.set('0')
#允许用户开始输入数字
self.entryNumber['state']='normal'
#玩游戏的次数加一
self.times.set(self.times.get()+1)
else:
#一共允许用户猜的次数
self.total=self.totalTimes.get()
#本次游戏的正确答案
self.current=self.currentNumber.get()
try:
self.x=int(self.varNumber.get())
except:
tkinter.messagebox.showerror('抱歉','必须输入整数')
return
if self.x==self.current:
tkinter.messagebox.showinfo('恭喜','猜对了')
self.button['text']='Start Game'
#禁用文本框
self.entryNumber['state']='disabled'
self.right.set(self.right.get()+1)
else:
#已猜次数加一
self.already.set(self.already.get()+1)
if self.x>self.current:
tkinter.messagebox.showerror('抱歉','猜的次数太大了')
else:
tkinter.messagebox.showerror('抱歉', '猜的次数太小了')
#可猜的的次数已经用完
if self.already.get()==self.total:
tkinter.messagebox.showerror('抱歉','游戏结束了,正确的数是: '+str(self.currentNumber.get()))
self.button['text']='Start Game'
#禁用文本框
self.entryNumber['state']='disabled'
else:
self.button['text']='剩余次数: '+str(self.total-self.already.get())
def main():
g=Guess_Game()
# g.root.protocol('WM_DELETE_WINDOW', g.closeWindow())
tkinter.mainloop()
g.closeWindows()
if __name__ == '__main__':
main()
关于tkinter的组件学习可以参考这位博主:
https://blog.csdn.net/mingshao104/article/details/79591965
以上程序的背景图来自这位博主:
https://blog.csdn.net/pymonster/article/details/113393829
程序来自《python程序设计基础》