Python Tkinter调用Path变量提示undefined未定义问题求解
报错原因
这个问题和代码相对于mainloop的位置无关,是两个基础逻辑错误导致的:
- 变量作用域错误:你在
exeNew()函数内部赋值的Path是函数局部变量,仅能在exeNew函数内部访问,函数执行完毕后局部变量会直接销毁,全局作用域下不存在这个变量 - 执行时机错误:你写在全局位置的
os.startfile(Path)会在程序启动时立刻执行,根本不会等待用户输入路径、点击ADD按钮,执行时自然找不到Path变量
修正方案
将启动Chrome的逻辑收拢到按钮绑定的exeNew回调函数内部,确保点击按钮拿到输入路径后再执行启动操作,完整可运行代码如下:
import tkinter as tk from tkinter import * import os root = Tk() root.geometry('700x700') def exeNew(): path = text0.get(1.0, "end-1c") # 增加非空校验,避免输入为空时触发系统报错 if path.strip(): os.startfile(path) text0 = tk.Text(root, height=1, width=30) text0.place(x=400, y=500) printButton = tk.Button(root, text="ADD", command=exeNew) printButton.place(x=460, y=640) root.mainloop()
补充说明
- 如果需要在多个函数中复用获取到的路径,可以在
exeNew内用global Path声明将变量提升为全局变量,但非必要不推荐滥用全局变量,容易引发难以排查的状态问题 - 路径输入框建议用
tk.Entry组件替代单行的Text组件,更适配单行文本输入的场景,获取内容的调用方式为entry.get()即可,不需要传入起止位置参数
内容的提问来源于stack exchange,提问作者Giannis Tsakas
相关产品推荐
相关产品推荐

