在我的Python GUI脚本中,我有一个弹出窗口,弹出窗口中有文本区域小部件,用户可以在里面输入一些内容,然后单击弹出窗口中的一个按钮以获取输入文本。
但似乎在定义的函数中,无法访问弹出窗口中的窗口小部件。代码如下:
from Tkinter import *
def Add_Content():
content = ent_new.get("1.0","end")
print content
def Add_Task():
task_index = 1
new_window = Toplevel()
label1 = Label(new_window, text="New Goal:")
label1.grid(row = 0, column = 0)
ent_new = Text(new_window, bg= "white", height=5, width= 30)
ent_new.grid(row=0,column =1,padx=5, pady=5)
bu_new = Button( new_window,text="Add", command = Add_Content)
bu_new.grid(row=0, column =2)
new_window.focus_force()
master = Tk()
group = LabelFrame(master, text="Operation", padx=5, pady=5, relief = RAISED)
group.grid(row=0,column= 0, padx=10, pady=10, sticky=N)
bu_add = Button(group, text = "Add Task",width = 15, command = Add_Task)
bu_add.grid(row=0,column=0)
mainloop()
在上面的脚本中,在函数Add_Content
中找不到ent_new答案 0 :(得分:1)
问题是ent_new
在另一个命名空间中。你可以通过Add_Content
在这样的论点中接收ent_new
来解决它,
def Add_Content(my_ent):
content = my_ent.get("1.0","end")
print content
然后在将其传递给Button
bu_new = Button( new_window,text="Add", command = lambda: Add_Content(ent_new))
答案 1 :(得分:1)
如果不添加类以及self和parent的概念,可以使用第一个答案中给出的lambda,也可以使用全局变量。
注意:在python圈子中,全局变量是相当不受欢迎的,但它们可以工作并完成工作。
from Tkinter import *
global ent_new
def Add_Content():
content = ent_new.get("1.0","end")
print content
def Add_Task():
global ent_new
task_index = 1
new_window = Toplevel()
label1 = Label(new_window, text="New Goal:")
label1.grid(row = 0, column = 0)
ent_new = Text(new_window, bg= "white", height=5, width= 30)
ent_new.grid(row=0,column =1,padx=5, pady=5)
bu_new = Button( new_window,text="Add", command = Add_Content)
bu_new.grid(row=0, column =2)
new_window.focus_force()
master = Tk()
group = LabelFrame(master, text="Operation", padx=5, pady=5, relief = RAISED)
group.grid(row=0,column= 0, padx=10, pady=10, sticky=N)
bu_add = Button(group, text = "Add Task",width = 15, command = Add_Task)
bu_add.grid(row=0,column=0)
mainloop()