gpt4 book ai didi

python - 从闭包返回值并在其他模块中使用它

转载 作者:行者123 更新时间:2023-11-30 22:14:11 25 4
gpt4 key购买 nike

我正在尝试从其他模块中的闭包中获取值。当我按下 GUI 中的按钮时,文件对话框会创建一个包含文件路径的字符串(因此此步骤有效)。然后应该可以在 main.py 中访问该字符串。这一步不起作用,在 main 中它始终是 None

这是我在文件 main.py 中的内容:

import mat_import
import GUI

filename1 = GUI.gui()

print(filename1)

这就是我在 GUI.py 中的内容

from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image
import os
import math
import sys

def gui():
mainpage = Tk()

def choose_file1():
filename1 = filedialog.askopenfilename()
lbl_read_file1_path = Label()
lbl_read_file1_path.configure(text = filename1)
lbl_read_file1_path.grid(column=1, row=5, sticky="W", columnspan=3)
return filename1

def returnfile1():
return choose_file1()

button_read_file1 = Button(mainpage, text="Durchsuchen...", command = returnfile1)
button_read_file1.config(height = 1, width = 15)
button_read_file1.grid(column=0, row=5, sticky="W")

mainloop()

我必须更改什么才能“打印”文件 main.py 中函数 choose_file1 (在函数 gui 内定义)的文件名字符串

最佳答案

您的代码有两个主要问题:

  • 函数 gui 没有显式返回值。因此,当您调用它时,它会返回 None

  • returnfile1 返回的值(从 choose_file1 获取)未存储在变量中,因此在函数退出时会丢失。

这是让您的代码正常工作的快速修复(无需在“main.py”中进行任何更改):

from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image
import os
import math
import sys

def gui():
mainpage = Tk()
# Variable to store the filename
filename1 = ""

def choose_file1():
# We want to use the same variable filename1 we declared above
nonlocal filename1
filename1 = filedialog.askopenfilename()
lbl_read_file1_path = Label()
lbl_read_file1_path.configure(text = filename1)
lbl_read_file1_path.grid(column=1, row=5, sticky="W", columnspan=3)
# No return statement is needed here

# Function 'returnfile1' is not needed.

button_read_file1 = Button(mainpage, text="Durchsuchen...", command = choose_file1)
button_read_file1.config(height = 1, width = 15)
button_read_file1.grid(column=0, row=5, sticky="W")

mainloop()

# Return the value of filename1
return filename1

关于python - 从闭包返回值并在其他模块中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50600998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com