猜数字小游戏就是顾名思义,程序随机生成一个数字,我们根据提示去猜测,直至猜出正确的数字。
Python标准库中内置了一个GUI库——Tkinter,这个库基于Tcl/Tk开发,这个库比较陈旧,提供的开发空间也比较有限,编写出来的GUI界面风格现代程序的GUI风格相差甚远,从用户体验的角度说,tkinter库并不成熟。
这里介绍三个高质量的用户图形界面Python生态库:PyQt5,wxPython,PyGTK。
PyQt5是Qt5应用框架的Python第三方库,它有超过620个类和近6000个函数和方法。它是Python中最为成熟的商业级GUI第三方库。这个库是Python语言当前最好的GUI第三方库,它可以在Windows、Linux和MacOS X等操作系统上跨平台使用。
wxPython是Python语言的一套优秀的GUI图形库,它是跨平台GUI库wxWidgets的Python封装,可以使Python程序员能够轻松地创建健壮可靠、功能强大的图形用户界面的程序。其中,wxWidgets使用C++语言编写,将C/C++语言编写的功能库进行二次封装是Python语言的重要特点之一。
PyGTK是基于GTK+的Python语言封装,它提供了各式的可视元素和功能,能够轻松创建具有图形用户界面的程序。PyGTK具有跨平台性,利用它编写的代码能够不加修改的稳定运行在各操作系统中,如Windows,MacOS,Linux等。
名称 | 功能 |
---|---|
Button | 按钮 |
Canvas | 绘图形组件,可以在其中绘制图形 |
Checkbutton | 复选框 |
Entry | 文本框(单行) |
Text | 文本框(多行) |
Frame | 框架,将几个组件组成一组 |
Label | 标签,可以显示文字或图片 |
Listbox | 列表框 |
Menu | 菜单 |
Menubutton | 它的功能完全可以使用Menu替代 |
Message | 与Label组件类似,但是可以根据自身大小将文本换行 |
Radiobutton | 单选框 |
Scale | 滑块;允许通过滑块来设置一数字值 |
Scrollbar | 滚动条;配合使用canvas, entry, listbox, and text窗口部件的标准滚动条 |
Toplevel | 用来创建子窗口窗口组件 |
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之间的小数 |
首先导入tkinter这个标准库,然后创建,再去设置窗口的标题,大小等,然后在实现界面的消息循环。
import tkinter
shuzi = tkinter.Tk() #生成主窗口
shuzi.title('猜数字游戏') #主窗口加标题
shuzi.geometry('400x300') # 设置主窗口的大小
shuzi.mainloop()
#建立一个文本,设置字的颜色,内容,字的字体、大小
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)
# 建立一个按钮,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)
首先定义随机数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('警告', '输入不正确!!!')
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()这个是不正确的,()这个不需要加的,应该舍去。这是我第一次写博客,希望多多支持!多多看书还是很棒的!