【发布时间】:2021-06-01 13:43:58
【问题描述】:
这是我想尝试并提出的数学挑战的代码,它提出了尽可能多的问题 但它会不断扩展窗口而不是创建一个新窗口,这也不会更新 scorestr。
关于如何让它“溶解”当前画布,然后关闭并重新打开带有新问题和更新分数的更新画布的任何帮助?
另外,如果有人知道如何在其中设置一个 60 秒的计时器,那将会对我有很大帮助。
图片显示了我遇到的问题。
请注意 仅在将整数转换为字符串后参考加号部分,其他部分尚未更新,因为加号仍然不起作用。
# generate random integer values
from random import randint
import tkinter as tk
score = 0
scorestr = ""
root = tk.Tk()
def game():
for x in range(3):
def f():
global score
score += 1
for _ in range(1):
symbol = randint(0, 0)
# define symbol for equation
if symbol == 0:
maths = "plus"
value1 = randint(0, 100)
value2 = randint(0, 100)
if symbol == 1:
maths = "minus"
value1 = randint(0, 100)
value2 = randint(0, 100)
if symbol == 2:
maths = "times"
value1 = randint(0, 12)
value2 = randint(0, 12)
if symbol == 3:
maths = "divide"
value1 = randint(1, 12)
value2 = randint(1, 12)
# generate some integers
if value1 < value2:
temp = value1
value1 = value2
value2 = temp
temp == ""
value1Str = str(value1)
value2Str = str(value2)
if maths == "plus":
answer = value1 + value2
canvas1 = tk.Canvas(root, width=400, height=300)
canvas1.pack()
entry1 = tk.Entry(root)
canvas1.create_window(200, 140, window=entry1)
def clickme():
uanswer = entry1.get()
uanswerint = int(uanswer)
if uanswerint == answer:
label3 = tk.Label(root, text='Correct')
canvas1.create_window(200, 280, window=label3)
f()
scorestr = str(score)
else:
label3 = tk.Label(root, text='Incorrect')
canvas1.create_window(200, 280, window=label3)
root.after(1000, game)
label1 = tk.Label(root, text="Score: " + scorestr)
canvas1.create_window(200, 230, window=label1)
label2 = tk.Label(root, text='What is ' + value1Str + ' + ' + value2Str)
canvas1.create_window(200, 100, window=label2)
button1 = tk.Button(text='Check Answer!', command=clickme)
canvas1.create_window(200, 180, window=button1)
if maths == "minus":
answer = value1 - value2
canvas1 = tk.Canvas(root, width=400, height=300)
canvas1.pack()
entry1 = tk.Entry(root)
canvas1.create_window(200, 140, window=entry1)
def clickme():
uanswer = entry1.get()
uanswerint = int(uanswer)
if uanswerint == answer:
label3 = tk.Label(root, text='Correct')
canvas1.create_window(200, 280, window=label3)
else:
label3 = tk.Label(root, text='Incorrect')
canvas1.create_window(200, 280, window=label3)
quit()
label1 = tk.Label(root, text=answer)
canvas1.create_window(200, 230, window=label1)
label2 = tk.Label(root, text='What is ' + value1Str + ' - ' + value2Str)
canvas1.create_window(200, 100, window=label2)
button1 = tk.Button(text='Check Answer!', command=clickme)
canvas1.create_window(200, 180, window=button1)
if maths == "times":
answer = value1 * value2
canvas1 = tk.Canvas(root, width=400, height=300)
canvas1.pack()
entry1 = tk.Entry(root)
canvas1.create_window(200, 140, window=entry1)
def clickme():
uanswer = entry1.get()
uanswerint = int(uanswer)
if uanswerint == answer:
label3 = tk.Label(root, text='Correct')
canvas1.create_window(200, 280, window=label3)
else:
label3 = tk.Label(root, text='Incorrect')
canvas1.create_window(200, 280, window=label3)
quit()
label1 = tk.Label(root, text=answer)
canvas1.create_window(200, 230, window=label1)
label2 = tk.Label(root, text='What is ' + value1Str + ' * ' + value2Str)
canvas1.create_window(200, 100, window=label2)
button1 = tk.Button(text='Check Answer!', command=clickme)
canvas1.create_window(200, 180, window=button1)
if maths == "divide":
answer = value1 / value2
canvas1 = tk.Canvas(root, width=400, height=300)
canvas1.pack()
entry1 = tk.Entry(root)
canvas1.create_window(200, 140, window=entry1)
def clickme():
uanswer = entry1.get()
uanswerint = int(uanswer)
if uanswerint == answer:
label3 = tk.Label(root, text='Correct')
canvas1.create_window(200, 280, window=label3)
else:
label3 = tk.Label(root, text='Incorrect')
canvas1.create_window(200, 280, window=label3)
quit()
label1 = tk.Label(root, text=answer)
canvas1.create_window(200, 230, window=label1)
label2 = tk.Label(root, text='What is ' + value1Str + ' / ' + value2Str)
canvas1.create_window(200, 100, window=label2)
button1 = tk.Button(text='Check Answer!', command=clickme)
canvas1.create_window(200, 180, window=button1)
root.mainloop()
game()
print (score)
【问题讨论】:
-
这是因为每当执行
game()时,您都会创建新的画布。您应该在game()之外创建画布,并使用canvas1.delete("all")在每次调用中清除画布。此外,for 循环也完全没有必要。第一次调用game()后的最后一步root.mainloop()。 -
请将此代码缩减为minimal reproducible example。