You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在另一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:45:38