python - 在 Tkinter 循环中跳出

标签 python user-interface loops tkinter ttk

我正在解决 Tkinter 无法跳出的问题。

这就是我正在运行的:

from Tkinter import *
import ttk

def plus(*args):
    value = float(a.get())
    value1 = float(b.get())
    result.set(value + value1)
    print "the result is " + str(result.get())

root = Tk()
root.title("Plus them")

mainframe = ttk.Frame(root, padding="10 10 10 10")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

a = StringVar()
b = StringVar()
result = StringVar()

feet_entry = ttk.Entry(mainframe, width=5, textvariable=a)
feet_entry.grid(column=2, row=1, sticky=(W, E))

feet_entry1 = ttk.Entry(mainframe, width=5, textvariable=b)
feet_entry1.grid(column=5, row=1, sticky=(W, E))

ttk.Label(mainframe, text="the result is").grid(column=3, row=2, sticky=W)
ttk.Label(mainframe, textvariable = result).grid(column=5, row=2, sticky=(W, E))

ttk.Button(mainframe, text="Plus", command=plus).grid(column=3, row=3, sticky=W)

for child in mainframe.winfo_children():
    child.grid_configure(padx=5, pady=5)
    feet_entry.focus()
    root.bind('<Return>', plus)
    root.mainloop()

enter image description here

当它运行时,看起来很好。但无论我点击多少次“加号”,它都不会“跳出”,直到我输入新的值进行计算,它仍然在等待新的输入。

如何调整使其只计算一次?谢谢。

最佳答案

要使您的窗口仅执行一次并使用加号按钮关闭窗口,请执行以下操作:

from Tkinter import *
import ttk




def plus(*args):
    value = float(a.get())
    value1 = float(b.get())
    result.set(value + value1)
    print "the result is " + str(result.get())
    root.destroy()             ####### look here !!!#######

root = Tk()

root.title("Plus them")

mainframe = ttk.Frame(root, padding="10 10 10 10")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

a = StringVar()
b = StringVar()
result = StringVar()

feet_entry = ttk.Entry(mainframe, width=5, textvariable=a)
feet_entry.grid(column=2, row=1, sticky=(W, E))

feet_entry1 = ttk.Entry(mainframe, width=5, textvariable=b)
feet_entry1.grid(column=5, row=1, sticky=(W, E))

ttk.Label(mainframe, text="the result is").grid(column=3, row=2, sticky=W)
ttk.Label(mainframe, textvariable = result).grid(column=5, row=2, sticky=(W, E))

ttk.Button(mainframe, text="Plus", command=plus).grid(column=3, row=3, sticky=W)


# for child in mainframe.winfo_children():
#     child.grid_configure(padx=5, pady=5)

feet_entry.focus()
root.bind('<Return>', plus)

root.mainloop()

所以在这里,在你的 plus callbeck 中你需要调用 root.destroy()。此外,这个循环 for child in mainframe.winfo_children() 在我的选项中没有意义,也不需要。所以我在示例中删除了它。

关于python - 在 Tkinter 循环中跳出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425838/

相关文章:

java - if 语句查询问题,eclipse 说 "dead code"

Python - 使用进度条和基本身份验证通过 HTTP 下载文件

python - 无法打开 urllib2 中的某些 url,但仍可以在浏览器中打开?

python - 如何在Python中动态创建多个线程

java - 为什么这个gui不更新?

php - 陷入 PHP 循环的中间

java - 为什么当我迭代每行中的 TableCellEditor 列时,itemStateChanged 仅调用一次?

python - 根据存储在 DataFrame 列中的 R、G、B 在 plotly 3D 散点图中设置标记颜色

java - Android 中的产品 flavor 内部 flavor

python - Python GUI 中的文本树