Python Tkinter教學 數字猜謎遊戲

coldplay.xixi
發布: 2020-10-29 17:20:23
轉載
3419 人瀏覽過

python影片教學欄位以數字猜謎遊戲介紹Tkinter。

Python Tkinter教學 數字猜謎遊戲

Tkinter是Python的Tk GUI(圖形使用者介面)工具包和事實上的標準GUI 的標準介面。 GUI可讓您使用大多數作業系統使用的視覺項目(例如窗口,圖示和選單)與電腦進行互動。這個功能強大的工具可用於建立各種項目,並且使視覺化程式碼更加容易。

在本文中,我們將了解Tkinter的基礎知識以及可在Python應用程式中使用的不同類型的小工具。在本文的後面,我們將使用Tkinter小部件開發一個很酷的數字猜測遊戲。

今天,我們將介紹:

  • Tkinter的基礎
  • Tkinter的小部件與範例
  • 從頭開始建立數字猜謎遊戲

Tkinter的基礎

在建立遊戲之前,我們需要了解Tkinter的一些基礎知識。 Tkinter軟體包是Tk GUI工具包的標準python介面。我們通常使用Tkinter套件在應用程式中插入不同的GUI小工具,以使其更加用戶友好。如果您在Linux,Windows或Mac上使用Python,則裝置上已經安裝了Python Tkinter。

我們如何開發GUI應用程式?

建立GUI應用程式的基本流程如下:

Import the Tkinter ModuleCreate Main WindowAdd WidgetsEnter Main Loop

使用Python開發GUI應用程式涉及的步驟:

  • 導入tkinter模組。
  • 為我們的GUI應用程式建立主視窗。
  • 現在,為我們的應用程式添加任意數量的小部件。
  • 進入主事件循環以執行我們的主要功能。

現在讓我們看看如何建立一個簡單的tkinter視窗:

首先,我們將匯入tkinter模組。它包含建立應用程式所需的所有功能,類別和其他內容。現在,當我們導入模組時,我們需要初始化tkinter。為此,我們建立Tk( )根視窗小工具。現在,這將創建我們的主GUI窗口,我們將在其中添加小部件。此時,我們的主視窗只有標題列。

我們應該只為我們的應用程式建立一個窗口,並且必須在添加任何其他小部件之前創建該窗口。之後,我們使用root.mainloop( )。除非輸入,否則不會顯示我們剛剛建立的主視窗mainloop。當我們按下關閉按鈕時,我們的程式將退出主循環。在按下關閉按鈕之前,我們的應用程式將一直運行。

用於建立簡單的tkinter視窗的程式碼:

#import required libraries
from tkinter import *

# initialize tkinter :
root = Tk()

# enter the main Loop :
root.mainloop()复制代码
登入後複製

Tkinter的小工具與範例

    ##**按鈕:**顯示按鈕。
  • **畫布:**繪製形狀。
  • **複選框:**將多個選項顯示為複選框。
  • **輸入:**接受使用者的單行輸入。
  • **框架:**組織其他小部件。
  • **標籤:**為其他小部件新增標題。
  • **列錶框:**向使用者提供選項清單。
  • 選單**按鈕:**在我們的應用程式中顯示選單。
  • **選單:**提供使用者各種命令。
  • **訊息:**顯示多行文字欄位。
  • **單選按鈕:**將選項數顯示為單選按鈕。
  • **比例尺:**提供滑桿。
  • **捲軸:**新增捲動功能。
  • **文字:**以多行顯示文字。
  • **頂層:**提供單獨的視窗容器。
  • **Spinbox:**從固定輸入值中選擇。
  • **PanedWindow:**水平或垂直排列小工具。
  • **LabelFrame:**以複雜的結構提供空間。
  • **tkMessageBox:**在應用程式中顯示訊息方塊。
現在,我們將簡要介紹in out應用程式中需要的一些小工具。請記住,這裡我們將以最簡單的範例演示​​該小部件。每個小部件中還有許多可用功能。在開發遊戲時,我們會看到其中的一些。

一些Tkinter小工具範例

按鈕: 按鈕小工具用於在我們的應用程式中顯示按鈕。通常,當我們按下一個按鈕時,將會有一個與之關聯的命令。

# Import required libraries :
from tkinter import *

# Initialize tkinter :
root = Tk()

# Adding widgets :

# Add button :
btn = Button(root,text="PRESS ME",command=lambda:press())
# Place button in window : 
btn.grid(row=0,column=0)

# Define the function :
def press()
  lbl = Label(root,text="You Pressed The Button")
  lbl.grid(row=0,column=1)

# Enter the main Loop : 
root.mainloop()复制代码
登入後複製
**標籤:**標籤小工具用於為我們應用程式中的其他小工具提供單行標題。

# Import required libraries :
from tkinter import *

# Initialize tkinter :
root = Tk()

# Adding widgets :

# Add label :
lbl = Label(root,text="This is label")

# Place the button on window :
lbl.grid(row=0,column=1)

# Enter the main Loop :
root.mainloop()复制代码
登入後複製
**畫布:**畫布小工具用於繪製各種形狀。

# Import required libraries :
from tkinter import *

# Initialize tkinter :
root = Tk()

# Adding widgets : 
# Add canvas : 
# Create canvas object : 
c = Canvas(root,bg="3389db",height=250,width-300)

# Draw a straight line :
line = c.create_line(0,0,50,50)

# To fit the line in the window
c.pack()

# Enter the main loop
root.mainloop()复制代码
登入後複製
**CheckButton:**我們使用checkbutton顯示可供使用者使用的多個選項。在這裡,用戶可以選擇多個選項。

# Import required libraries :
from tkinter import *

# Initialize tkinter :
root = Tk()

# Adding widgets : 
# Add checkbutton : 

# IntVar() hold integers
# Default value is 0
# If checkbox is marked, this will change to 1
checkvar1 = IntVar()
checkvar2 = IntVar()

# Create checkbutton 
c1 = Checkbutton(root,text="BMW", variable=checkvar1)
c2 = Checkbutton(root,text="Audi",variable=checkbar2)

# To fit in the main window
c1.grid(row=0,column=0)
c2.grid(row=1,column=0)

# Enter the main Loop
root.mainloop()复制代码
登入後複製

Entry: Entry小工具用於接受使用者的單行輸入。

# Import required libraries 
from tkinter import *

# Initialize tkinter
root = Tk()

# Adding widgets 
# Label 
lbl = Label(root,text="Enter your name:")
lbl.grid(row=0,column=0)

# Entry 
e = Entry(root)
e.grid(row=0,column=1)

# Enter the main Loop
root.mainloop()复制代码
登入後複製
**框架:**用作容器小部件,以組織同一應用程式中的其他小部件

# Import required libraries 
from tkinter import *

# Initialize tkinter
root = Tk()

# Adding widgets 

frame = Frame(root)
frame.pack()

# Add button on Left
A = Button(frame,text="A")
A.pack(side = LEFT)

# Add button on Right 
B = Button(frame,text="B")
B.pack(side = RIGHT)

# Enter the main Loop
root.mainloop()复制代码
登入後複製
**列錶框:**用於向使用者提供選項列表。

# Import required libraries 
from tkinter import *

# Initialize tkinter
root = Tk()

# Adding widgets 

# Create Listbox : 
Lb = Listbox(root)

# Add items in list
Lb.insert(1,"A")
Lb.insert(2,"B")
Lb.insert(3,"C")
Lb.insert(4,"D")

# Place listbox on window 
Lb.grid(row=0,column=0)

# Enter the main Loop
root.mainloop()复制代码
登入後複製

從頭開始建立數字猜謎遊戲

分步演练

当用户运行程序时,我们的代码将生成一个介于0到9之间的随机数。用户将不知道随机生成的数字。现在,用户必须猜测随机生成的数字的值。用户在输入框中输入值。之后,用户将按下检查按钮。该按钮将触发功能。该功能将检查用户输入的号码是否与随机生成的号码匹配。如果猜测的数字正确,则程序将显示正确的标签和实际数字(在这种情况下,该数字将与猜测的数字相同)。

现在,如果猜测的数字小于随机生成的数字,则我们的程序将显示TOO LOW标签,并且这还将清除输入框,以便用户可以输入新的数字。

如果猜中的数字高于实际数字,则我们的程序将显示TOO HIGH标签,并清除输入框。这样,用户可以继续猜测正确的数字。

如果标签显示TOO HIGH,则用户应该输入比他们猜想的数字低的数字。如果标签显示TOO LOW,则用户应该输入比他们第一次猜测的数字更大的数字。

我们的程序还将计算用户猜测正确数字所需的尝试次数。当用户最终做出正确的猜测时,它将显示总尝试次数。

如果用户想玩新游戏,则必须按下主关闭按钮。如果用户在我们的应用程序中按下“ **关闭”**按钮,则他们将完全退出游戏。

只需简单的步骤即可:

  • 运行应用程序。
  • 输入您的猜测。
  • 按下检查按钮。
  • 如果标签显示不正确,请猜测一个新数字。
  • 如果标签显示正确,则显示尝试次数。
  • 按下主关闭按钮以新号码重新开始游戏。
  • 从我们的应用程序中按下关闭按钮以完全退出游戏。

![Python Tkinter教程系列02:数字猜谜游戏插图(12)](https://img.php.cn/upload/article/000/000/052/a829e9a273177c9e7f7b0cf1d39a0ef6-0.jpg "Python Tkinter教程系列02:数字猜谜游戏插图(12)")我们将逐步向您展示如何使用Python tkinter构建上述游戏。

图片素材在这里IT小站,此处下载数字猜谜游戏素材

步骤1:导入所需的库

# import required libraies :

from tkinter import * # to add widgets
import random # to generate a random number
import tkinter.font as font # to change properties of font
import simpleaudio as sa # to play sound files复制代码
登入後複製

步骤2:建立主Tkinter视窗

want_to_play = True 

while want_to_play==True:

  root = Tk()
  root.title("Guess The Number!")
  root.geometry('+100+0')
  root.configure(bg="#000000")
  root.resizable(width=False,height=False)
  root.iconphoto(True,PhotoImage(file="surprise.png"))复制代码
登入後複製
  • 首先,我们创建一个名为的变量want_to_play,并将其值设置为True。当变量设置为时,我们的程序将生成一个新窗口True。当用户按下主关闭按钮时,它将退出循环,但是在这里,我们将变量设置为True,因此它将使用新生成的数字创建另一个窗口。
  • root = Tk( ):用于初始化我们的tkinter模块。
  • root.title( ):我们使用它来设置应用程序的标题。
  • root.geometry( ):我们使用它来指定我们的应用程序窗口将在哪个位置打开。
  • root.configure( ):我们使用它来指定应用程序的背景色。
  • root.resizable( ):在这里我们使用它来防止用户调整主窗口的大小。
  • root.iconphoto( ):我们使用它来设置应用程序窗口标题栏中的图标。我们将第一个参数设置为True

步骤3:导入声音文件

# to play sound files 
start = sa.WaveObject.from_wave_file("Start.wav")
one = sa.WaveObject.from_wave_file("Win.wav")
two = sa.WaveObjet.from_wave_file("Lose.wav")
three = sa.WaveObject.from_wave_file("Draw.wav")

start.play()复制代码
登入後複製

现在,我们将使用一些将在各种事件中播放的声音文件。当我们的程序启动时,它将播放开始文件。当用户的猜测正确,用户的猜测错误以及用户关闭应用程序时,我们将分别播放其余三个文件。需要注意的一件事是它仅接受.wav文件。首先,我们需要将声音文件加载到对象中。然后我们可以.play( )在需要时使用方法播放它。

步骤4:为我们的应用程序加载图像

我们将在应用程序中使用各种图像。要首先使用这些图像,我们需要加载这些图像。在这里,我们将使用PhotoImage类加载图像。

# Loading images
Check = PhotoImage(file="Check_5.png")
High = PhotoImage(file="High_5.png")
Low = PhotoImage(file="Low_5.png")
Correct = PhotoImage(file="Correct_5.png")
Surprise = PhotoImage(file="Surprise.png")
your_choice = PhotoImage(file="YOUR_GUESS.png")
fingers = PhotoImage(file="fingers.png")
close = PhotoImage(file="Close_5.png")复制代码
登入後複製

步骤5:产生随机数

在这里,我们将生成1–9之间的随机数。我们将使用随机模块生成1–9之间的随机整数。

# generating random number
number = random.randint(1,9)复制代码
登入後複製

步骤6:修改字体

在这里,我们将使用字体模块来更改应用程序中的字体。

# using font module to modify fonts
myFont = font.Font(family='Helvetica',weight='bold')复制代码
登入後複製

步骤7:添加小部件

在这里,我们添加了应用程序的前两个小部件。请注意,输入框位于第2行,因为我们在第1行中添加了空格。在这里,我们将在标签中使用图像文件。我们用于.grid( )指定特定小部件的位置。

# Creating first label
label = Label(root,image=your_choice)
label.grid(row=0,column=1)

# Creating the entry box 
e1 = Entry(root,bd=5,width=13,bg="9ca1db",justify=CENTER,font=myFont)
e1.grid(row=2,column=1)复制代码
登入後複製

步骤8:添加其他小部件

在这里,我们将添加其他一些小部件,例如按钮和标签。将有两个按钮,一个用于检查值,另一个用于永久关闭窗口。第二个标签将显示用户猜测的值是正确还是高还是低。它将相应地显示标签。如果用户的猜测正确,第三个标签将显示正确的数字。

第四个标签显示用户猜测正确值所花费的尝试总数。在这里请注意,这两个按钮将触发命令。在接下来的几点中,我们将对此进行研究。

# Creating check button :
b1 = Button(root,image=Check,command=lambda:show())
b1.grid(row=4,column=3)

# Creating close button :
b2 = Button(root,image=close,command=lambda:reset())

#Creaating second label :
label2 = Label(root,image=fingers)
label2.grid(row=6,column=1)

#Creating third label :
label3 = Label(root,image=Surprise)
label3.grid(row=10,column=1)

#Creating fourth label :
label4= Label(root,text="ATTEMPTS : ",bd=5,width=13,bg="#34e0f2",justify=CENTER,font=myFont)
label4.grid(row=12,column=1)复制代码
登入後複製

步骤9:显示正确的图像并将计数器设置为尝试值

当用户的猜测正确时,我们将在此处显示正确的数字图像。我们的数字存储方式如下:

  • 1.png
  • 2.png
  • 3.png
  • 100.png

因此,我们的程序将采用实际的数字,并在其中添加.png字符串并打开该文件。我们还将设置计数器以计算尝试值。它将存储尝试猜测正确数字所需的尝试次数值。

# to display the correct image
num = PhotoImage(file = str(number)+str(".png"))

# Set the count to 0
count = 0复制代码
登入後複製

步骤10:当我们按下检查按钮时将触发的功能

在这里,每当用户按下检查按钮时,尝试次数的计数值将增加一。然后,我们将用户输入的值存储在名为answer的变量中。然后,我们将检查用户是否尚未输入任何值,并按下检查按钮,它将转到reset()功能,应用程序将关闭。

现在,我们必须将用户输入的值转换为整数,以便将其与实际数字进行比较。

def show():

    #Increase the count value as the user presses check button.
    global count
    count = count+1

    #Get the value entered by user.
    answer = e1.get()

    #If the entry value is null the goto reset() function.
    if answer=="":
        reset()

    #Convert it to int for comparision.
    answer = int(e1.get())

    if answer > number:
            #Play sound file.
            two.play()
            #Change the label to Too High.
            label2.configure(image=High)
            #Calls all pending idle tasks.
            root.update_idletasks()
            #Wait for 1 second.
            root.after(1000)
            #Clear the entry.
            e1.delete(0,"end")
            #Change the label to the original value.
            label2.configure(image=fingers)

        elif answer < number:
            #Play sound file.
            two.play()
            #Change the label to Too Low.
            label2.configure(image=Low)
            #Calls all pending idle tasks.
            root.update_idletasks()
            #Wait for 1 second.
            root.after(1000)
            #Clear the entry.
            e1.delete(0,"end")
            #Change the label to the original value.
            label2.configure(image=fingers)

        else:
            #Play sound file.
            one.play()
            #Show the CORRECT image.
            label2.configure(image=Correct)
            #Show the correct number.
            label3.configure(image=num)
            #Show the number of attempts.
            label4.configure(text="ATTEMPTS : "+str(count))复制代码
登入後複製

步骤11:“关闭”按钮将触发reset()功能

此函数会将want_to_play变量设置为,False以便我们的应用程序关闭并且不会再次启动。然后它将关闭我们的应用程序的主窗口。

# define reset() function 
def reset():
  # Play sound file 
  three.play()
  # Change the variable to false
  global want_to_play
  want_to_play = false
  # Close the tkinter window
  root.destroy()复制代码
登入後複製

步骤12:主循环

我们必须进入主循环才能运行程序。如果我们的程序没有这一行,那么它将行不通。我们的程序将保持在主循环中,直到我们按下关闭按钮。

# Enter the mainLoop
root.mainloop()复制代码
登入後複製

完整代码

#Import required libraries :

from tkinter import *
import random
import tkinter.font as font
import simpleaudio as sa

want_to_play = True

while want_to_play==True:

    root = Tk()
    root.title("Guess The Number!")
    root.geometry(&#39;+100+0&#39;)
    root.configure(bg="#000000")
    root.resizable(width=False,height=False)
    root.iconphoto(True,PhotoImage(file="surprise.png"))

    #To play sound files:
    start = sa.WaveObject.from_wave_file("Start.wav")
    one = sa.WaveObject.from_wave_file("Win.wav")
    two = sa.WaveObject.from_wave_file("Lose.wav")
    three = sa.WaveObject.from_wave_file("Draw.wav")

    start.play()

    #Loading images :
    Check = PhotoImage(file="Check_5.png")
    High = PhotoImage(file="High_5.png")
    Low = PhotoImage(file="Low_5.png")
    Correct = PhotoImage(file="Correct_5.png")
    Surprise= PhotoImage(file ="Surprise.png")
    your_choice = PhotoImage(file="YOUR_GUESS.png")
    fingers = PhotoImage(file = "Fingers.png")
    close = PhotoImage(file="Close_5.png")

    #To have space between rows.
    root.grid_rowconfigure(1, minsize=30) 
    root.grid_rowconfigure(3, minsize=30) 
    root.grid_rowconfigure(5, minsize=30) 
    root.grid_rowconfigure(9, minsize=30)
    root.grid_rowconfigure(11, minsize=30) 

    #Generating random number :
    number = random.randint(1,9)

    #Using font module to modify the fonts :
    myFont = font.Font(family=&#39;Helvetica&#39;,weight=&#39;bold&#39;)

    #Creating the first label :
    label = Label(root,image=your_choice)
    label.grid(row=0,column=1)

    #Creating the entry box :
    e1 = Entry(root,bd=5,width=13,bg="#9ca1db",justify=CENTER,font=myFont)
    e1.grid(row=2,column=1)

    #Creating check button :
    b1 = Button(root,image=Check,command=lambda:show())
    b1.grid(row=4,column=3)

    #Creating close button :
    b2 = Button(root,image=close,command=lambda:reset())
    b2.grid(row=4,column=0)

    #Creaating second label :
    label2 = Label(root,image=fingers)
    label2.grid(row=6,column=1)

    #Creating third label :
    label3 = Label(root,image=Surprise)
    label3.grid(row=10,column=1)

    #Creating fourth label :
    label4= Label(root,text="ATTEMPTS : ",bd=5,width=13,bg="#34e0f2",justify=CENTER,font=myFont)
    label4.grid(row=12,column=1)

    #To display the correct image :
    num = PhotoImage(file=str(number)+str(".png"))    

    #Set the count to 0.
    #It stores the attempt value.
    count = 0

    def show():

        #Increase the count value as the user presses check button.
        global count
        count = count+1

        #Get the value entered by user.
        answer = e1.get()

        #If the entry value is null the goto reset() function.
        if answer=="":
            reset()

        #Convert it to int for comparision.
        answer = int(e1.get())

        if answer > number:
            #Play sound file.
            two.play()
            #Change the label to Too High.
            label2.configure(image=High)
            #Calls all pending idle tasks.
            root.update_idletasks()
            #Wait for 1 second.
            root.after(1000)
            #Clear the entry.
            e1.delete(0,"end")
            #Change the label to the original value.
            label2.configure(image=fingers)

        elif answer < number:
            #Play sound file.
            two.play()
            #Change the label to Too Low.
            label2.configure(image=Low)
            #Calls all pending idle tasks.
            root.update_idletasks()
            #Wait for 1 second.
            root.after(1000)
            #Clear the entry.
            e1.delete(0,"end")
            #Change the label to the original value.
            label2.configure(image=fingers)

        else:
            #Play sound file.
            one.play()
            #Show the CORRECT image.
            label2.configure(image=Correct)
            #Show the correct number.
            label3.configure(image=num)
            #Show the number of attempts.
            label4.configure(text="ATTEMPTS : "+str(count))

    #Define reset() function :            
    def reset():
        #Play the sound file.
        three.play()
        #Change the variable to false.
        global want_to_play
        want_to_play = False
        #Close the tkinter window.
        root.destroy()

    #Enter the mainloop :
    root.mainloop()复制代码
登入後複製

相关免费学习推荐:python视频教程

以上是Python Tkinter教學 數字猜謎遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板