中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python Tkinter實現數字猜謎游戲的案例

發布時間:2020-11-02 11:54:12 來源:億速云 閱讀:195 作者:小新 欄目:編程語言

小編給大家分享一下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('+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 < 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 Tkinter實現數字猜謎游戲的案例有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云安县| 朔州市| 德兴市| 东乌珠穆沁旗| 三亚市| 文化| 雅安市| 太仓市| 旬阳县| 马山县| 尚志市| 贵德县| 伊春市| 安龙县| 梨树县| 呈贡县| 出国| 东港市| 台江县| 威信县| 江西省| 青川县| 河西区| 榆社县| 肃南| 池州市| 安溪县| 太仓市| 垣曲县| 莫力| 定西市| 柞水县| 贵阳市| 都昌县| 白水县| 辉县市| 隆尧县| 大悟县| 台湾省| 漳平市| 武隆县|