Dotcpp  >  编程教程  >  PythonGUI编程  >  Tkinter模块(6)-练习

Tkinter模块(6)-练习

点击打开在线编译器,边学边练

基于我们前面学习的内容,我们已经可以进行一些小程序的开发,本节我们就来通过两个练习来进一步掌握相关知识。

1. 猜数字

使用Tkinter开发一个猜数字游戏,运行效果如图所示。游戏中电脑随机生成1024以内数字,使用者去猜,如果猜得数字过大过小都会进行提示并把范围缩小,程序要统计玩家猜的次数,最后提示猜测次数。

tkinter22

点击猜之后会呈现下图界面:

tkinter23

程序代码如下:

from tkinter import *
import random
number = random.randint(0,1024)
running = True
num = 0
minn = 0
maxx = 1024

def Close(event):
    root.destroy()

def Guess(event):
    global running
    global num
    global minn
    global maxx
    if running:
        guess1 = int(events.get())
        if guess1 == number:
            labelqval('恭喜答对了')
            num+=1
            running = False
            numGuess()
        elif guess1<number:
            if guess1>minn:
                minn = guess1
                num+=1
                labelqval('猜小了哦!,请输入'+str(minn)+'到'+str(maxx)+'之间的任意整数')
        else :
            if guess1<maxx:
                maxx = guess1
                num+=1
                labelqval('猜大了哦!,请输入'+str(minn)+'到'+str(maxx)+'之间的任意整数')

    else:
        labelqval('你已经答对了!')

def numGuess():
    if num == 1:
        labelqval('一次就答对了!')
    elif num<10:
        labelqval('十次之内就答对了!!!尝试次数:'+str(num))
    else :
        labelqval('猜数字,你已经猜了超过十次了。。。尝试次数:'+str(num))

def labelqval(vtext):
    label_a.config(label_a,text=vtext)

root=Tk(className='猜数字游戏')
root.geometry('400x90+200+200')
label_a=Label(root,width='80')
label_a.pack(side='top')

events = Entry(root,width='40')
btnGuess = Button(root,text='猜')
events.pack(side='left')
events.bind('<Return>',Guess)
btnGuess.bind('<Button-1>',Guess)
btnGuess.pack(side='left')
btnClose = Button(root,text='关闭')
btnClose.bind('<Button-1>',Close)
btnClose.pack(side = 'left')
labelqval('请输入0到1024之间的任意整数:')
events.focus_set()
print(number)
root.mainloop()

这个代码为不加注释的代码,使用的内容我们前面基本都学习过,大家可以通过前面学习的知识去尝试着解决这个问题,最后参考上面的代码,去自己理解一下这个程序的实现细节。

2. 发牌游戏

游戏——扑克牌发牌程序窗体图形版:

4名选手打牌,电脑随机将52张牌(不含大小王)发给4名选手,在屏幕上显示每位牌手的牌,程序的运行效果如图所示。

扑克牌图片在链接中提取。

链接:https://pan.baidu.com/s/1UmTpj4iSksZxF-K0GLaT_A  提取码:gm2x 

下面我们会使用到我们上一节讲到的canvas模块,还有一个新的方法。

image=canvas.create_image(50,50,image="picture.gif")

tkinter24

代码如下:

import random
from tkinter import *
n = 52
def gen_pocker(n):
    x = 100
    while(x>0):
        x = x-1
        p1 = random.randint(0,n-1)
        p2 = random.randint(0,n-1)
        t = pocker[p1]
        pocker[p1] = pocker[p2]
        pocker[p2] = t
    return pocker
pocker = [i for i in range(n)]
pocker = gen_pocker(n)
print(pocker)
(player1,player2,player3,player4) = ([],[],[],[])
(p1,p2,p3,p4) = ([],[],[],[])
root = Tk()
cv = Canvas(root,bg = 'white',width = 700,height = 600)#创建一个画布,在画布中来显示这些牌
imgs = []
for i in range(1,5):#注意下面的内容,我们把每个数字的扑克牌对应为每张图片
    for j in range(1,14):
        imgs.insert((i-1)*13+(j-1),PhotoImage(file = r'C:/Users/轻烟/PycharmProjects/untitled1/teach/puke-images/' + str(i) + "-" + str(j) + ".gif"))
for x in range(13):
    m=x*4
    p1.append(pocker[m])
    p2.append(pocker[m + 1])
    p3.append(pocker[m + 2])
    p4.append(pocker[m + 3])
p1.sort()
p2.sort()
p3.sort()
p4.sort()
for x in range(0,13):#注意下面是画布的功能使用,对象为图片对象,前面为它的具体位置,我们可以通过更改位置信息来显示牌的具体定位
    img = imgs[p1[x]]
    player1.append(cv.create_image((200+20*x,80),image = img))
    img = imgs[p2[x]]
    player2.append(cv.create_image((100,150+20*x),image = img))
    img = imgs[p3[x]]
    player3.append(cv.create_image((200+20*x,500),image = img))
    img = imgs[p4[x]]
    player4.append(cv.create_image((560,150+20*x),image = img))
print("player1:",player1)
print("player2:",player2)
print("player3:",player3)
print("player4:",player4)
cv.pack()
root.mainloop()

这个题目的实现原理我们在前面的例题中已经分析过,在这里我们只要注意我们使用了图形界面去把每张牌的数字去对应每一个图片,然后我们在通过canvas控件的定位功能把所有的牌在画布中显示出来,使用的过程中一定要注意图片的路径问题。

3. 总结

关于Tkinter的学习我们就到这里,通过这些功能我们可以进行简单的登录界面,去设计UI界面,使用相关控件去开发程序,下面我们来学习另外一个GUI模块——wxPython



本文固定URL:https://www.dotcpp.com/course/290

Python教程
第一章 Python入门
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 Python函数
第六章 Python面向对象编程
第七章 Python模块
第八章 Python异常处理和程序调试
第九章 Python文件及目录操作
第十章 PythonGUI编程
第十一章 Python进程和线程
第十二章 Python数据库管理
第十三章 Python算法
第十四章 Python爬虫
第十五章 Python实战项目
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)