Python编写的猜数字小游戏~~~基于Tkinter库

编写猜数字小游戏

猜数字小游戏就是顾名思义,程序随机生成一个数字,我们根据提示去猜测,直至猜出正确的数字。

一、界面

Python标准库中内置了一个GUI库——Tkinter,这个库基于Tcl/Tk开发,这个库比较陈旧,提供的开发空间也比较有限,编写出来的GUI界面风格现代程序的GUI风格相差甚远,从用户体验的角度说,tkinter库并不成熟。
这里介绍三个高质量的用户图形界面Python生态库:PyQt5,wxPython,PyGTK。

1.PyQt5

PyQt5是Qt5应用框架的Python第三方库,它有超过620个类和近6000个函数和方法。它是Python中最为成熟的商业级GUI第三方库。这个库是Python语言当前最好的GUI第三方库,它可以在Windows、Linux和MacOS X等操作系统上跨平台使用。

2. wxPython

wxPython是Python语言的一套优秀的GUI图形库,它是跨平台GUI库wxWidgets的Python封装,可以使Python程序员能够轻松地创建健壮可靠、功能强大的图形用户界面的程序。其中,wxWidgets使用C++语言编写,将C/C++语言编写的功能库进行二次封装是Python语言的重要特点之一。

3. PyGTK

PyGTK是基于GTK+的Python语言封装,它提供了各式的可视元素和功能,能够轻松创建具有图形用户界面的程序。PyGTK具有跨平台性,利用它编写的代码能够不加修改的稳定运行在各操作系统中,如Windows,MacOS,Linux等。

二、Tkinter功能

① 15种核心组件

名称 功能
Button 按钮
Canvas 绘图形组件,可以在其中绘制图形
Checkbutton 复选框
Entry 文本框(单行)
Text 文本框(多行)
Frame 框架,将几个组件组成一组
Label 标签,可以显示文字或图片
Listbox 列表框
Menu 菜单
Menubutton 它的功能完全可以使用Menu替代
Message 与Label组件类似,但是可以根据自身大小将文本换行
Radiobutton 单选框
Scale 滑块;允许通过滑块来设置一数字值
Scrollbar 滚动条;配合使用canvas, entry, listbox, and text窗口部件的标准滚动条
Toplevel 用来创建子窗口窗口组件

② 组件的放置和排版(pack,grid,place)

pack组件设置位置属性参数:

名称 功能
after 将组件置于其他组件之后
before 将组件置于其他组件之前
anchor 组件的对齐方式,顶对齐’n’,底对齐’s’,左’w’,右’e’
side 组件在主窗口的位置,可以为’top’,‘bottom’,‘left’,‘right’(使用时tkinter.TOP,tkinter.LEFT)
fill 填充方式 (Y,垂直,X,水平,BOTH,水平+垂直),是否在某个方向充满窗口
expand 1可扩展,0不可扩展,代表控件是否会随窗口缩放

grid组件使用行列的方法放置组件的位置,参数有:

名称 功能
column 组件所在的列起始位置
columnspan 组件的列宽;跨列数
row 组件所在的行起始位置
rowspan 组件的行宽;rowspam=3 跨3行
sticky 对齐方式:NSEW(北南东西)上下左右
padx、pady x方向间距、y方向间距(padx=5)

place组件可以直接使用坐标来放置组件,参数有:

名称 功能
anchor 组件对齐方式;n, ne, e, se, s, sw, w, nw, or center ; (‘n’==N)
x 组件左上角的x坐标
y 组件左上角的y坐标
relx 组件左上角相对于窗口的x坐标,应为0-1之间的小数;图形位置相对窗口变化
rely 组件左上角相对于窗口的y坐标,应为0-1之间的小数
width 组件的宽度
heitht 组件的高度
relwidth 组件相对于窗口的宽度,0-1之间的小数,图形宽度相对窗口变化
relheight 组件相对于窗口的高度,0-1之间的小数

三、代码分解

1.创建主界面

首先导入tkinter这个标准库,然后创建,再去设置窗口的标题,大小等,然后在实现界面的消息循环。

import tkinter

shuzi = tkinter.Tk()                    #生成主窗口
shuzi.title('猜数字游戏')                #主窗口加标题
shuzi.geometry('400x300')               # 设置主窗口的大小
shuzi.mainloop()

效果展示
Python编写的猜数字小游戏~~~基于Tkinter库

2.填充内容

#建立一个文本,设置字的颜色,内容,字的字体、大小
label1 = tkinter.Label(shuzi,fg='black',text="猜数字小游戏",font=('宋体',35,'bold')) 
#设置文本框的位置      
label1.grid(padx=75)                              

label2 = tkinter.Label(shuzi,fg='black',text="游戏规则:\n从1到100中猜数字!!!",font=('宋体',15,'bold'))       
label2.grid(padx=10,pady=10)

label3 = tkinter.Label(shuzi,fg='black',text="请输入你所猜测的数字:",font=('宋体',15,'bold'))
label3.grid(padx=10,pady=10)

text = tkinter.Entry(shuzi,width=30)
text.grid(padx=100)

效果展示
Python编写的猜数字小游戏~~~基于Tkinter库

3.添加button键

# 建立一个按钮,command:通过按钮触发比较函数
button1 = tkinter.Button(shuzi, text='确定',command=compare, width=10, font=('微软雅黑', 10,))           
# 设置按钮的位置
button1.grid(padx=10,pady=10)

# 建立一个按钮,command:通过按钮触发界面退出,bg是背景颜色
button2 = tkinter.Button(shuzi, text='退出游戏',command=shuzi.quit, width=10, bg='yellow', font=('微软雅黑', 10,))
button2.grid(padx=10,pady=10)

效果展示
Python编写的猜数字小游戏~~~基于Tkinter库

4.猜数字函数

首先定义随机数number,然后获取用户输入的数字,比较大小,然后跳出不同的提示框。

import random
number = random.randint(1,100)
def compare():
    use = int(text.get())
    if use == '':
        tkinter.messagebox.showerror('警告','输入不能让为空!!!')

    elif use > number:
        tkinter.messagebox.showinfo('不正确', '大,大了,老弟!加油!')

    elif use < number:
        tkinter.messagebox.showinfo('不正确', '小,小了,老弟!不错呦!')

    elif use == number:
        tkinter.messagebox.showinfo('正确', '哎呦,你咋这么聪明的呢!赏你个摸摸哒!')

    else :
        tkinter.messagebox.showerror('警告', '输入不正确!!!')

效果展示
Python编写的猜数字小游戏~~~基于Tkinter库Python编写的猜数字小游戏~~~基于Tkinter库Python编写的猜数字小游戏~~~基于Tkinter库

四、完整纯净代码

import tkinter
from tkinter import messagebox
import random

shuzi = tkinter.Tk()                    
shuzi.title('猜数字游戏')               
shuzi.geometry('400x300')               
number = random.randint(1,100)

label1 = tkinter.Label(shuzi,fg='black',text="猜数字小游戏",font=('宋体',35,'bold'))      
label1.grid(padx=75)                                    #

label2 = tkinter.Label(shuzi,fg='black',text="游戏规则:\n从1到100中猜数字!!!",font=('宋体',15,'bold'))    
label2.grid(padx=10,pady=10)

label3 = tkinter.Label(shuzi,fg='black',text="请输入你所猜测的数字:",font=('宋体',15,'bold'))
label3.grid(padx=10,pady=10)

text = tkinter.Entry(shuzi,width=30)
text.grid(padx=100)

def compare():
    use = int(text.get())
    if use == '':
        tkinter.messagebox.showerror('警告','输入不能让为空!!!')

    elif use > number:
        tkinter.messagebox.showinfo('不正确', '大,大了,老弟!加油!')

    elif use < number:
        tkinter.messagebox.showinfo('不正确', '小,小了,老弟!不错呦!')

    elif use == number:
        tkinter.messagebox.showinfo('正确', '哎呦,你咋这么聪明的呢!赏你个摸摸哒!')

    else :
        tkinter.messagebox.showerror('警告', '输入不正确!!!')


button1 = tkinter.Button(shuzi, text='确定',command=compare, width=10, font=('微软雅黑', 10,))          
button1.grid(padx=10,pady=10)

button2 = tkinter.Button(shuzi, text='退出游戏',command=shuzi.quit, width=10, bg='yellow', font=('微软雅黑', 10,))
button2.grid(padx=10,pady=10)

shuzi.mainloop()

五、总结

首先要注意库的引用,然后在第二个command中我已开始用的shuzi.quit()这个是不正确的,()这个不需要加的,应该舍去。这是我第一次写博客,希望多多支持!多多看书还是很棒的!