Python开发带GUI界面的猜数字游戏

tkinter

tkinter(即 tk interface,简称“Tk”)是 Python 官方推荐的 GUI 工具包,属于 Python 自带的标准库模块,可以直接使用它,而无须另行安装。
作为一款 Python GUI 工具,tkinter 拥有良好的跨平台性,支持 Windows、Linux、Mac 平台,它传承了 Python 语法简洁、代码易读的基本特点。

为什么GUI

在Windows上鼓捣的还是比较多,习惯GUI应用。但好像Python来做好像并不合适,使用不当。但不管怎么样,还是先写一个应用,不然好像啥也没学似的😀

tkinter提供了什么

tkinter提供了GUI常规的所有组件。以下是常规的几个

按钮组件

Button 按钮组件
RadioButton 单选框组件
CheckButton 选择按钮组件
Listbox 列表框组件

文本框组件

Label 标签组件,可以显示图片和文字
Message 标签组件,可以根据内容将文字换行

菜单组件

Menu 菜单组件
MenuButton 菜单按钮组件,可以使用Menu代替

猜数字游戏

这个大家可能都玩过,非常简单。不多介绍了,参考了别人的代码,详见引用。

代码

完整代码

import random
import tkinter as tk
import tkinter.messagebox

window = tk.Tk()
window.title('猜数游戏')
window.iconbitmap('./guess.ico')
# 设置窗口大小变量
width = 300
height = 300
# 窗口居中,获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = window.winfo_screenwidth()
screenheight = window.winfo_screenheight()
size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
window.geometry(size_geo)
window.resizable(False, False)
labeltext = '''这是一个猜数字的游戏!
你可以在1~50之间选择一个数字
并且你有5次机会回答
不要输入不在范围内的数字哟
不然会浪费掉一次机会的呢
机会有限好好珍惜呀!
快来试试吧!'''
label = tk.Label(window, text=labeltext, font=('times', 12, 'bold italic'), bg="#7CCD7C",
                 # 设置标签内容区大小
                 width=28, height=6,
                 # 设置填充区距离、边框宽度和其样式(凹陷式)
                 padx=5, pady=10, borderwidth=10, relief="sunken")
# label.grid(row=0, sticky="s")
label.place(relx=0.04, rely=0.05)
label2 = tk.Label(window, text='输入数字:', font=('times', 12))

NumEntry = tk.Entry(window, width=5, font=('times', 12), bg="GreenYellow", bd=2)
label2.place(relx=0.25, rely=0.65)
NumEntry.place(relx=0.55, rely=0.65)

num_r = random.randint(1, 50)
i = 0
success = 0
total = 1


def myGuess():
    global i, success, total, num_r
    btn_txt = button1['text']
    if btn_txt == 'Retry':
        re_try = tkinter.messagebox.askyesno("提示", f"你已经玩了{total}局,成功{success}局,重开一局?")
        if re_try:
            num_r = random.randint(1, 50)
            i = 0
            total += 1
            button1['text'] = 'Guess'
            label['text'] = labeltext
    else:
        guess = int(NumEntry.get())
        i += 1
        print(guess)
        if guess < 1 or guess > 50:
            info = f'你输入的数字不在范围内\n浪费掉了一次机会,好可惜呀!\n你还剩{5 - i}次机会!!加油呦!!'
            #       print('你输入的数字不在范围内还浪费掉了一次机会,好可惜呀!')
            #       print(f'你还剩{5 - i}次机会!!加油呦!!')
            print(info)
            label['text'] = info
        # 运用if语句通过条件,判断是否猜小了
        elif guess < num_r and i != 5:
            info = f'你猜的{guess},小了呦,再试试叭!\n你还剩{5 - i}次机会!!加油呦!!'
            #    print('你猜小了呦,再试试叭!')
            #    print(f'你还剩{5 - i}次机会!!加油呦!!')
            print(info)
            label['text'] = info

            # 运用if语句通过条件,判断是否猜大了
        elif guess > num_r and i != 5:
            info = f'你猜的{guess},大了呦,再试试叭!\n你还剩{5 - i}次机会!!加油呦!!'
            print(info)
            label['text'] = info
        #    print('你猜大了呦,再试试叭!')
        #    print(f'你还剩{5 - i}次机会!!加油呦!!')
        # 运用if语句通过条件,判断是否为5次都猜错了
        elif guess != num_r and i == 5:
            info = f'很遗憾你用完了5次机会都没答对\n正确答案是{num_r}!\n重新开始游戏再试试叭!'
            #    print(f'很遗憾你用完了5次机会都没答对,正确答案是{num_r},重新开始游戏再试试叭!')
            print(info)
            label['text'] = info
            button1['text'] = 'Retry'
            # 运用else判断玩家几次回答正确,并退出程序
        else:
            info = f'你真厉害,只用了{i}次机会\n就回答正确啦!\n没错它就是{num_r}!'
            print(info)
            label['text'] = info
            #    print(f'你真厉害,只用了{i}次机会就回答正确啦!没错它就是{num_r}!')
            success += 1
            button1['text'] = 'Retry'


button1 = tk.Button(window, text='Guess', bg="DeepSkyBlue", width=8, height=2, command=myGuess)
button2 = tk.Button(window, text='Quit', bg="OrangeRed", width=8, height=2, command=window.quit)
# button1.grid(row=1, column=0, sticky="w", padx=10, pady=5,command=lambda :get())
# button2.grid(row=1, column=3, padx=10, pady=5)
button1.place(relx=0.2, rely=0.8)
button2.place(relx=0.6, rely=0.8)

window.mainloop()

结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

引用

Python之有趣的小程序——猜数字2.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值