Python:如何访问弹出窗口的小部件

时间:2015-09-24 12:43:10

标签: python user-interface tkinter popup

在我的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

2 个答案:

答案 0 :(得分:1)

问题是ent_new在另一个命名空间中。你可以通过Add_Content在这样的论点中接收ent_new来解决它,

def Add_Content(my_ent):
    content = my_ent.get("1.0","end")
    print content

然后在将其传递给Button

时使用包装函数(lambda)
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()