搜尋
首頁後端開發Python教學Python Tkinter教學 數字猜謎遊戲

Python Tkinter教學 數字猜謎遊戲

Oct 29, 2020 pm 05:19 PM
pythontkinter

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 <p><strong>步骤11:“关闭”按钮将触发<code>reset()</code>功能</strong></p><p>此函数会将<code>want_to_play</code>变量设置为,<code>False</code>以便我们的应用程序关闭并且不会再次启动。然后它将关闭我们的应用程序的主窗口。</p><pre class="brush:php;toolbar: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('+100+0')
    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='Helvetica',weight='bold')

    #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 <blockquote><p><strong>相关免费学习推荐:</strong><a href="https://www.php.cn/course/list/30.html" target="_blank"><strong>python视频教程</strong></a></p></blockquote>

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

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除
Python:自動化,腳本和任務管理Python:自動化,腳本和任務管理Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境