python Tkinter获取文件路径返回给主函数使用并传递给其他函数

bvjveswy  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(207)

这是我目前的代码。

from tkinter import *
from tkinter import ttk, filedialog
from tkinter.filedialog import askopenfile
import os

def main():
    path = open_file()
    print(path)
    
# Create an instance of tkinter frame
win = Tk()

# Set the geometry of tkinter frame
win.geometry("700x350")

def open_file():
   
   file = filedialog.askopenfile(mode='r', filetypes=[('PDF', '*.pdf')])
   if file:
      filepath = os.path.abspath(file.name)
      quit()
      print(filepath)
    
def quit():
    win.destroy()

# Add a Label widget
label = Label(win, text="Click the Button to browse the Files", font=('Georgia 13'))
label.pack(pady=10)

# Create a Button
ttk.Button(win, text="Browse", command=open_file).pack(pady=20)

win.mainloop()

if __name__ == '__main__':
    main()

我想创建一个简单的GUI来选择一个文件,然后在以后的其他函数中使用它的路径。在当前代码中,在open_file函数中窗口关闭后,文件路径会正常打印出来。但只有当print语句在函数中时才有效。如果我把它从那里移走并想打印出来(只是为了测试)或者进一步使用它从main传递给其他函数,它看起来不起作用。没有错误,但是也没有打印任何东西。有什么想法吗?

n6lpvg4x

n6lpvg4x1#

问题似乎是想从一个用按钮调用的函数返回一个值。这是apparently not possible。我找到的最简单的解决方案(不需要改变太多代码结构)是使用一个全局变量filepath。现在你几乎可以在任何地方使用它。
另外,我已经从main()函数中删除了path = open_file(),因为它是多余的。现在该函数只在按下按钮时调用,而不是在程序每次启动时调用。

from tkinter import * 
from tkinter import ttk, filedialog 
from tkinter.filedialog import askopenfile 
import os

def main():
    print(filepath)
    
# Create an instance of tkinter frame 
win = Tk()

# Set the geometry of tkinter frame 
win.geometry("700x350")

def open_file():
    file = filedialog.askopenfile(mode='r', filetypes=[('PDF', '*.pdf')])    
        if file:
            global filepath
            filepath = os.path.abspath(file.name)
            quit()

def quit():
    win.destroy()

# Add a Label widget 
label = Label(win, text="Click the Button to browse the Files", font=('Georgia 13')) label.pack(pady=10)

# Create a Button 
ttk.Button(win, text="Browse", command=open_file).pack(pady=20)

win.mainloop()

if __name__ == '__main__':
    main()

相关问题