2015-02-10 99 views
1

我在Tkinter上工作不会跳出问题。在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

当它运行时,它似乎罚款。但是,无论点击“Plus”多少次,它都不会“跳出来”,直到我输入新值进行计算并且仍在等待新条目。

我该如何调整以使其仅计算一次?谢谢。

+0

不明白你想达到什么。这是为mainframe.winfo_children()'中的child for循环'的目的是什么? – Marcin 2015-02-10 07:09:13

回答

1

为了使您的窗口只执行一次,并有加号按钮关闭窗口做如下:

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

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

+0

奇妙!谢谢。以及如果我想要在执行脚本后保持GUI运行/打开,而不是在运行后关闭它?我的意思是我可以使用同一个小窗口进行不同的计算,并且无需每次都打开它。可能吗? – 2015-02-10 07:20:32

+0

你不能。 'root.mainloop()'是一个无限循环。直到你关闭它,没有任何东西超过'root.mainloop()'执行。但是,如果你想保持你的窗口打开,并计算许多总和,只需在加回调中注释'root.destroy()'。 – Marcin 2015-02-10 07:25:12

+0

再次感谢。顺便说一下,我梦想制作一个小程序,因此我需要将上面的程序包打包到一个.exe文件中?你能否指点我的方向?非常感谢。 – 2015-02-10 07:29:18