ホームページ >バックエンド開発 >Python チュートリアル >Python Tkinter チュートリアル 数字当てゲーム
Tkinter は、Python の Tk GUI (グラフィカル ユーザー インターフェイス) ツールキットの標準インターフェイスであり、事実上の標準 GUI です。 GUI を使用すると、ウィンドウ、アイコン、メニューなど、ほとんどのオペレーティング システムで使用される視覚的な項目を使用してコンピュータと対話できます。この強力なツールを使用すると、さまざまなプロジェクトを構築でき、コードの視覚化が容易になります。
この記事では、Tkinter の基本と、Python アプリケーションで使用できるさまざまな種類のウィジェットについて学びます。この記事の後半では、Tkinter ウィジェットを使用してクールな数字推測ゲームを開発します。
今日は、次の内容を紹介します。
ゲームを構築する前に、Tkinter の基本をいくつか理解する必要があります。 Tkinter パッケージは、Tk GUI ツールキットへの標準の Python インターフェイスです。通常、アプリケーションをより使いやすくするために、Tkinter パッケージを使用してさまざまな GUI ウィジェットをアプリケーションに挿入します。 Linux、Windows、または Mac で Python を使用している場合、Python Tkinter はデバイスにすでにインストールされています。
GUI アプリケーションを作成する基本的なプロセスは次のとおりです。
Tkinter モジュールをインポートするメイン ウィンドウを作成するウィジェットを追加するメイン ループに入る
次に、簡単な tkinter ウィンドウを作成する方法を見てみましょう:
まず、tkinter モジュールをインポートします。これには、アプリケーションの構築に必要なすべての関数、クラス、その他のものが含まれています。ここで、モジュールをインポートするときに、tkinter を初期化する必要があります。これを行うには、Tk( )
ルート ウィジェットを作成します。これにより、ウィジェットを追加するメイン GUI ウィンドウが作成されます。この時点では、メイン ウィンドウにはタイトル バーのみが表示されます。
アプリケーションにはウィンドウを 1 つだけ作成する必要があり、このウィンドウは他のウィジェットを追加する前に作成する必要があります。その後、root.mainloop( )
を使用します。先ほど作成したメイン ウィンドウ mainloop
は、入力しない限り表示されません。閉じるボタンを押すと、プログラムはメインループを終了します。アプリケーションは閉じるボタンが押されるまで実行されます。
単純な tkinter ウィンドウを作成するコード:
#import required libraries from tkinter import * # initialize tkinter : root = Tk() # enter the main Loop : root.mainloop()复制代码
Button: ボタン ウィジェットは、アプリケーションにボタンを表示するために使用されます。通常、ボタンを押すと、それに関連付けられたコマンドが表示されます。
# 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()复制代码**ラベル:**ラベル ウィジェットは、アプリケーション内の他のウィジェットに 1 行のタイトルを提供するために使用されます。
# 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:** チェックボタンを使用して、ユーザーが利用できる複数のオプションを表示します。ここで、ユーザーは複数のオプションを選択できます。
# 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 ウィジェットは、ユーザーからの 1 行入力を受け入れるために使用されます。
# 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:显示正确的图像并将计数器设置为尝试值
当用户的猜测正确时,我们将在此处显示正确的数字图像。我们的数字存储方式如下:
因此,我们的程序将采用实际的数字,并在其中添加.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视频教程
以上がPython Tkinter チュートリアル 数字当てゲームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。