<p>我的答案与@furas非常相似,但说明了如何定义和使用<code>class</code>来避免(或至少最小化)使用全局变量——这对您想要做的事情都不起作用。在这种情况下,将其存储在tkinter <a href="https://web.archive.org/web/20201031100214id_/https://effbot.org/tkinterbook/variable.htm" rel="nofollow noreferrer">^{<cd2>}</a>中,并显式地将该<em>作为参数传递给另一个模块的文件中定义的函数</p>
<p>正如他(和我)强烈建议的那样,我也在很大程度上尝试遵循<a href="https://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">PEP 8 - Style Guide for Python Code</a>,特别是关于<a href="https://www.python.org/dev/peps/pep-0008/#naming-conventions" rel="nofollow noreferrer">naming conventions</a>部分中的内容(这也适用于模块<em>文件</em>名称)</p>
<h3><code>first_window.py</code></h3>
<pre><code>import tkinter as tk
import second_window as sw
class MyApp:
def __init__(self, master):
self.frame = tk.Frame(master, borderwidth=5, relief="ridge")
self.frame.grid(row=0, column=0)
self.my_var = tk.IntVar(master=master, value=0)
analyze_btn = tk.Button(self.frame, text="Analyze",
command=lambda: sw.change_value(self.my_var))
analyze_btn.grid(row=0, column=0, columnspan=2)
tk.Label(self.frame, text="My var:").grid(row=1, column=0)
tk.Label(self.frame, textvariable=self.my_var).grid(row=1, column=1)
if __name__ == '__main__':
root = tk.Tk() # Create a main window.
root.geometry("750x250")
my_app = MyApp(root)
root.mainloop()
</code></pre>
<h3><code>second_window.py</code></h3>
<pre><code>import tkinter as tk
def change_my_num(var):
var.set(var.get() + 1) # Increment value in IntVar.
def change_value(var):
second_window = tk.Tk() # Create a 2nd window.
second_window.geometry("150x150")
frame2 = tk.Frame(second_window, borderwidth=5, relief="ridge")
frame2.grid(row=0, column=0)
change_val_btn = tk.Button(frame2, text="Press to Change Global",
command=lambda: change_my_num(var))
change_val_btn.grid(row=0, column=0)
done_btn = tk.Button(frame2, text="Done", command=second_window.destroy)
done_btn.grid(row=1, column=0)
</code></pre>