<p>修复<code>NameError</code>的一种方法是使其成为类实例的属性,因为它是代码中<code>openDIALOG()</code>函数中的局部变量。这比使用全局变量要好,全局变量是另一个选项,但是<a href="http://wiki.c2.com/?GlobalVariablesAreBad" rel="nofollow noreferrer">global variables are bad</a></p>
<p>Stackoverflow并不是为了取代现有的教程或文档,所以我将只简单介绍下面的演示代码的作用。如果您花时间学习,在线提供的大多数Python教程都会更全面地介绍这个主题</p>
<p>下面是根据您问题中的代码可以实现的方法。注意<code>littletext</code>现在是<code>self.littletext</code>。这是因为它已转换为已定义的<code>class MY_DIALOG</code>的类属性,因此可以通过<code>self</code>参数访问它,该参数将自动作为所有类函数(称为类“方法”)的第一个参数传递</p>
<pre><code>import tkinter as tk
from tkinter.constants import *
class MyDialog:
def __init__(self, window):
DIALOG = tk.Toplevel(window)
DIALOG.title("DIALOG")
DIALOG.geometry("400x300+100+100")
self.littletext = tk.Text(DIALOG, height=15)
self.littletext.pack()
btn1 = tk.Button(DIALOG, text="POST TO MAIN WINDOW", command=self.GetFromDIALOG)
btn1.pack(side="left")
btn2 = tk.Button(DIALOG, text="EXIT", command=DIALOG.destroy)
btn2.pack(side="left")
def GetFromDIALOG(self):
X = self.littletext.get("1.0", END)
print(X)
if __name__ == '__main__':
window = tk.Tk()
window.title("main")
menubar = tk.Menu(window)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="RUN A DIALOG", command=lambda: MyDialog(window))
filemenu.add_command(label="Exit", command=window.destroy)
menubar.add_cascade(label="FILE", menu=filemenu)
window.config(menu=menubar)
BIGTEXT = tk.Text(window)
BIGTEXT.pack()
BUTTON = tk.Button(window, text="Post", command=lambda: MyDialog(window))
BUTTON.pack()
window.mainloop()
</code></pre>