如何在另一个Python文件中修改并使用变量?
问题描述
我有两个Python文件File_A和File_B,需要在File_A中定义变量,让File_B使用该变量执行操作。具体代码示例如下:
File_A 代码
import tkinter as tk window = tk.Tk() entry = tk.Entry(window) entry.pack() button = tk.Button(window, text="Click me!", command=lambda: on_button_click(entry.get())) button.pack() def on_button_click(ip): pass # 需求:把变量改成ip,然后运行File_B window.mainloop()
File_B 代码
print(value) # 打印File_A中输入的value
我曾尝试在File_B中写:
from File_A import value
但这个方法不仅无效,还会导致GUI窗口再次打开,求可行的解决办法。
解决办法
方案1:将File_B改为可接收参数的模块函数
这是最直接的方案,把File_B封装成函数,通过函数调用传递参数,既不会重复启动GUI,也能直接传递变量。
修改File_B.py:
def print_input_value(value): print(value)
修改File_A.py中的on_button_click函数:
import File_B # 导入File_B模块 def on_button_click(ip): File_B.print_input_value(ip) # 调用函数并传入输入的ip值
方案2:通过命令行参数独立运行File_B
如果需要让File_B作为独立进程运行(而非模块调用),可以用subprocess模块将参数通过命令行传递给File_B。
修改File_A.py的on_button_click函数:
import subprocess import sys def on_button_click(ip): # 调用Python解释器运行File_B,并传入ip作为命令行参数 subprocess.run([sys.executable, "File_B.py", ip])
修改File_B.py读取命令行参数:
import sys if __name__ == "__main__": # 读取命令行传入的参数(sys.argv[0]是脚本名,sys.argv[1]是第一个参数) if len(sys.argv) > 1: value = sys.argv[1] print(value)
原方法失效的原因
你之前的写法会重复打开GUI,是因为Python导入模块时会执行模块内所有顶层代码——File_A里的window = tk.Tk()和window.mainloop()都属于顶层代码,导入时会直接运行,所以再次弹出了GUI。另外,你并没有在File_A中定义value变量,自然无法导入成功。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

