Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从外部功能访问tkinter条目_Python_User Interface_Tkinter_Scope - Fatal编程技术网

Python 从外部功能访问tkinter条目

Python 从外部功能访问tkinter条目,python,user-interface,tkinter,scope,Python,User Interface,Tkinter,Scope,我需要从定义条目小部件的函数外部访问条目小部件的内容。 我有一个主窗口,它调用一个函数来创建另一个窗口: def submit(): print(entry.get()) def function(): window2 = Tk() … entry = Entry(window2) button2 = Button(window2, command=submit) … window2.mainloop() window = Tk() …

我需要从定义条目小部件的函数外部访问条目小部件的内容。 我有一个主窗口,它调用一个函数来创建另一个窗口:

def submit():
    print(entry.get())

def function():
    window2 = Tk()
    …
    entry = Entry(window2)
    button2 = Button(window2, command=submit)
    …
    window2.mainloop()

window = Tk()
…
button = Button(window, command=function)
...
window.mainloop()

但是,entry小部件超出范围,因此无法被函数看到。有没有一种不用全局变量的方法可以做到这一点?

您可以使用tkinter中的类
StringVar()
。使用它可以方便地监视tkinter变量的更改

part_text = StringVar() # Create a string var which acts like a text holder
part_entry = Entry(app, textvariable=part_text) # pass it to the entry
part_text.get() #this is how to access the text in the entry anywhere in your script

你不需要为特金特做什么特别的事。与python中的任何对象一样,如果要访问对象,需要保留对对象的引用

例如,您应该将
条目
设置为全局变量。或者,您可以让
函数
条目
小部件作为参数传递到
提交
函数

下面是后者的一个例子:

def submit(entry):
    print(entry.get())

def function():
    ...
    entry = Entry(window2)
    button2 = Button(window2, command=lambda entry=entry: submit(entry))


您还将遇到其他问题--您不应该创建多个
Tk
实例。如果需要多个窗口,请创建
Toplevel
的实例。此外,您几乎不应该多次调用
mainloop
。您只需要运行一个实例。

StringVar
不能解决这个问题,它只是稍微移动了一下。他们在访问
StringVar
实例时遇到的问题与现在访问entry小部件时遇到的问题相同。