我对python比较陌生,所以请耐心等待。
我的问题有两个方面:
首先,我试图制作一个GUI,每次在新的框架中随机弹出不同的句子。
其次,我希望用户能够在不停止脚本的情况下关闭GUI,就像它在后台运行一样。
这是我的代码:
import Tkinter as tk
import random
number = random.randint(0,13)
sentence = {contains 13 sentences
}
window = tk.Tk()
window.output = tk.Label(text = sentence[number])
window.title("I Always See You")
window.geometry("300x150")
def next():
rand= random.randint(0, 13)
window2 = tk.Tk()
window2.output = tk.Label(text = sentence[rand])
window2.output.pack(side="top", fill="x", expand=True)
window2.title("I Always See You")
window2.geometry("300x150")
window.output.pack(side="top", fill="x", expand=True)
choice()
window.after(1000, next)
window.mainloop()
我的问题:当我的第二帧弹出时,没有任何文字显示,如果它确实有弹出的东西,它会出现在第一帧中。
另外,如何在.after()?
中插入随机浮点数非常感谢你的帮助!
欢呼声
答案 0 :(得分:0)
您在第二个窗口中看不到文本,因为Tkinter无法处理两个主窗口。您需要将Toplevel
类用于其他类。此外,您尚未在next
中指定标签的父级,因此它可能会打包在window
内,而不是window2
。
此外,您需要14个句子,因为randint
与randrange
不同,包括两个终点。
要在after
中设置随机时间,只需使用randint
,因为它需要整数ms。
为了达到你想要的效果,我建议你创建一个将被撤销的主窗口(它将在后台运行)。然后用随机句子弹出Toplevels。如果您希望窗口不断弹出,则需要在after
函数内再次调用next
。为了防止在用户关闭Toplevel时取消after
,我从撤回的主窗口调用after
方法:
import Tkinter as tk
import random
number = random.randint(0,13)
sentence = {i: str(i) for i in range(14)}
def next():
rand=random.randint(0, 13)
window2 = tk.Toplevel(root)
window2.output = tk.Label(window2, text=sentence[rand])
window2.output.pack(side="top", fill="x", expand=True)
window2.title("I Always See You")
window2.geometry("300x150")
tps = random.randint(1000, 10000)
root.after(tps, next)
root = tk.Tk()
root.withdraw() # hide root window
window = tk.Toplevel(root)
window.output = tk.Label(window, text=sentence[number])
window.title("I Always See You")
window.geometry("300x150")
window.output.pack(side="top", fill="x", expand=True)
tps = random.randint(1000, 10000)
root.after(tps, next)
root.mainloop()