如何在 tkinter 中为我的重试按钮添加功能?
How to add functionality to my try again button in tkinter?
我编写了一个生成两个数字并要求用户计算其和并输入结果的代码。程序运行良好,但我想要的是添加一个按钮,再次要求用户输入结果并进行验证。我面临的问题是该条目未被清除,另一个 window 在具有相同条目的原始 window 下面打开。
import tkinter as tk
import random
window = tk.Tk()
content = tk.StringVar()
def startgame():
number1 = random.randint(10, 51)
number2 = random.randint(10, 51)
sum_of_num = number1 + number2
def checkresult():
global content
i = int(content.get())
if i == sum_of_num:
label = tk.Label(window, text = "Correct Result", fg = "blue").pack()
else:
label = tk.Label(window, text = "Incorrect result!! Try again.", fg = "red").pack()
window.title("Number Guessing Game")
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
sum_of_numbers = tk.Entry(window, textvariable = content)
sum_of_numbers.pack()
sum_of_numbers.focus_set()
button_to_check_result = tk.Button(window, text="Check whether answer is correct", fg = "red", command = checkresult).pack()
startgame()
button_to_try_again = tk.Button(window, text="Try Again !!", fg = "red", command = startgame).pack()
window.mainloop()
我希望在清除输入后再次出现相同的 window。
将整个段定义为一个函数:
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
然后将该函数绑定到您计划实现的 'Reset' 按钮。或者,如果您想在每次用户按下 'Check' 按钮时重置,那么您可以调用 checkresult().
中的函数
基本上您要做的是在现有标签上显示新标签。
首先我会定义
text_number1 = tk.StringVar()
text_number2 = tk.StringVar()
sum_of_num = 0
然后我将开始游戏功能更改为
def startgame():
global sum_of_num
number1 = random.randint(10, 51)
text_number1.set(str(number1))
number2 = random.randint(10, 51)
text_number2.set(str(number2))
sum_of_num = number1 + number2
并相应地标记
label_num1 = tk.Label(window, textvar = text_number1, fg = "blue").pack()
label_num2 = tk.Label(window, textvar = text_number2, fg = "blue").pack()
接下来您需要的是重置按钮
button_to_check_reset = tk.Button(window, text="Reset your question", fg = "red", command = new_question).pack()
最后但并非最不重要的 new_question 功能
def new_question()
startgame()
sum_of_numbers.delete(0, 'end')
这是最低限度。
但是如果你想要一个不会出现和过时标签的程序,你需要再添加一个 stringvar 来初始化,例如
answer_string = StringVar()
answer_string.set("Waiting for your answer")
比将 anwer 标签放在其他标签之后
answer_lable = tk.Label(window, textvar = answer_string, fg = "blue").pack()
那你需要改造检查结果功能
def checkresult():
i = int(content.get())
if i == sum_of_num:
answer_lable['fg'] ="green"
answer_string.set("Correct, that was not hard right?")
else:
answer_lable['fg'] ="red"
answer_string.set("Wrong, you moron")
并对新问题函数做一点修改:
def new_question()
startgame()
sum_of_numbers.delete(0, 'end')
answer_lable['fg'] ="blue"
answer_string.set("Waiting for your answer...")
希望对您有所帮助,祝您好运:)
为了清除window,您需要将所有标签打包到一个框架中。为此,您需要先从 tkinter 导入 ttk:
from tkinter import ttk
fr = ttk.Frame()
现在,所有变量的主值都需要从 'window' 更改为 'fr'。但作为更简单的方法,我所做的是使用变量 'window' 作为框架。所以,
root= tk.Tk()
window = ttk.Frame(root)
现在,要清除框架,您可以使用以下任一命令:
window.pack_forget()
window.destroy()
最终修改后的代码如下:
import tkinter as tk
import random
from tkinter import ttk
root = tk.Tk()
content = tk.StringVar()
global window
window = ttk.Frame(root)
def startgame():
global window
window.pack_forget()
window = ttk.Frame(root)
number1 = random.randint(10, 51)
number2 = random.randint(10, 51)
sum_of_num = number1 + number2
def checkresult():
global content
i = int(content.get())
if i == sum_of_num:
label = tk.Label(window, text = "Correct Result", fg = "blue").pack()
else:
label = tk.Label(window, text = "Incorrect result!! Try again.", fg = "red").pack()
root.title("Number Guessing Game")
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
sum_of_numbers = tk.Entry(window, textvariable = content)
sum_of_numbers.pack()
sum_of_numbers.focus_set()
button_to_check_result = tk.Button(window, text="Check whether answer is correct", fg = "red", command = checkresult).pack()
window.pack()
startgame()
button_to_try_again = tk.Button(root, text="Try Again !!", fg = "red", command = startgame).pack()
window.mainloop()
我编写了一个生成两个数字并要求用户计算其和并输入结果的代码。程序运行良好,但我想要的是添加一个按钮,再次要求用户输入结果并进行验证。我面临的问题是该条目未被清除,另一个 window 在具有相同条目的原始 window 下面打开。
import tkinter as tk
import random
window = tk.Tk()
content = tk.StringVar()
def startgame():
number1 = random.randint(10, 51)
number2 = random.randint(10, 51)
sum_of_num = number1 + number2
def checkresult():
global content
i = int(content.get())
if i == sum_of_num:
label = tk.Label(window, text = "Correct Result", fg = "blue").pack()
else:
label = tk.Label(window, text = "Incorrect result!! Try again.", fg = "red").pack()
window.title("Number Guessing Game")
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
sum_of_numbers = tk.Entry(window, textvariable = content)
sum_of_numbers.pack()
sum_of_numbers.focus_set()
button_to_check_result = tk.Button(window, text="Check whether answer is correct", fg = "red", command = checkresult).pack()
startgame()
button_to_try_again = tk.Button(window, text="Try Again !!", fg = "red", command = startgame).pack()
window.mainloop()
我希望在清除输入后再次出现相同的 window。
将整个段定义为一个函数:
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
然后将该函数绑定到您计划实现的 'Reset' 按钮。或者,如果您想在每次用户按下 'Check' 按钮时重置,那么您可以调用 checkresult().
中的函数基本上您要做的是在现有标签上显示新标签。
首先我会定义
text_number1 = tk.StringVar()
text_number2 = tk.StringVar()
sum_of_num = 0
然后我将开始游戏功能更改为
def startgame():
global sum_of_num
number1 = random.randint(10, 51)
text_number1.set(str(number1))
number2 = random.randint(10, 51)
text_number2.set(str(number2))
sum_of_num = number1 + number2
并相应地标记
label_num1 = tk.Label(window, textvar = text_number1, fg = "blue").pack()
label_num2 = tk.Label(window, textvar = text_number2, fg = "blue").pack()
接下来您需要的是重置按钮
button_to_check_reset = tk.Button(window, text="Reset your question", fg = "red", command = new_question).pack()
最后但并非最不重要的 new_question 功能
def new_question()
startgame()
sum_of_numbers.delete(0, 'end')
这是最低限度。
但是如果你想要一个不会出现和过时标签的程序,你需要再添加一个 stringvar 来初始化,例如
answer_string = StringVar()
answer_string.set("Waiting for your answer")
比将 anwer 标签放在其他标签之后
answer_lable = tk.Label(window, textvar = answer_string, fg = "blue").pack()
那你需要改造检查结果功能
def checkresult():
i = int(content.get())
if i == sum_of_num:
answer_lable['fg'] ="green"
answer_string.set("Correct, that was not hard right?")
else:
answer_lable['fg'] ="red"
answer_string.set("Wrong, you moron")
并对新问题函数做一点修改:
def new_question()
startgame()
sum_of_numbers.delete(0, 'end')
answer_lable['fg'] ="blue"
answer_string.set("Waiting for your answer...")
希望对您有所帮助,祝您好运:)
为了清除window,您需要将所有标签打包到一个框架中。为此,您需要先从 tkinter 导入 ttk:
from tkinter import ttk
fr = ttk.Frame()
现在,所有变量的主值都需要从 'window' 更改为 'fr'。但作为更简单的方法,我所做的是使用变量 'window' 作为框架。所以,
root= tk.Tk()
window = ttk.Frame(root)
现在,要清除框架,您可以使用以下任一命令:
window.pack_forget()
window.destroy()
最终修改后的代码如下:
import tkinter as tk
import random
from tkinter import ttk
root = tk.Tk()
content = tk.StringVar()
global window
window = ttk.Frame(root)
def startgame():
global window
window.pack_forget()
window = ttk.Frame(root)
number1 = random.randint(10, 51)
number2 = random.randint(10, 51)
sum_of_num = number1 + number2
def checkresult():
global content
i = int(content.get())
if i == sum_of_num:
label = tk.Label(window, text = "Correct Result", fg = "blue").pack()
else:
label = tk.Label(window, text = "Incorrect result!! Try again.", fg = "red").pack()
root.title("Number Guessing Game")
label = tk.Label(window, text = "Let's begin the Quiz", fg = "blue").pack()
label = tk.Label(window, text = "---------------------", fg = "blue").pack()
label = tk.Label(window, text = "Given two numbers", fg = "blue").pack()
label = tk.Label(window, text = number1, fg = "blue").pack()
label = tk.Label(window, text = number2, fg = "blue").pack()
label = tk.Label(window, text = "Add these two numbers and enter the result", fg = "blue").pack()
sum_of_numbers = tk.Entry(window, textvariable = content)
sum_of_numbers.pack()
sum_of_numbers.focus_set()
button_to_check_result = tk.Button(window, text="Check whether answer is correct", fg = "red", command = checkresult).pack()
window.pack()
startgame()
button_to_try_again = tk.Button(root, text="Try Again !!", fg = "red", command = startgame).pack()
window.mainloop()