如何在不停止脚本的情况下随机弹出一些gui #python 2.7

时间:2017-01-31 05:02:52

标签: python python-2.7 user-interface random tkinter

我对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()?

中插入随机浮点数

非常感谢你的帮助!

欢呼声

1 个答案:

答案 0 :(得分:0)

您在第二个窗口中看不到文本,因为Tkinter无法处理两个主窗口。您需要将Toplevel类用于其他类。此外,您尚未在next中指定标​​签的父级,因此它可能会打包在window内,而不是window2

此外,您需要14个句子,因为randintrandrange不同,包括两个终点。

要在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()