python-3.x - 使用 Tkinter 定义文件列表以用于分析。很难全局访问变量。(Python 3)
问题描述
我希望一切都好。对编程相当陌生,所以请多多包涵。
我正在使用 tkinter 开发一个 GUI,它会提示我选择一组用于执行某些分析的文件。我希望将这些文件存储在以后可以参考的列表中。有两个必需的文件,一个 DBC 文件和一个 ASC 文件。我遇到的问题是能够引用我定义的函数之外的文件。我已经尝试将它定义为一个全局变量(我已经阅读过它是不可取的,因为它可能会导致问题)。我收到一条错误消息,说在尝试打印时未定义 dbfiles 或 ascfiles。以下是我到目前为止所写的:
import tkinter as tk
from tkinter import messagebox
from tkinter import filedialog
root = tk.Tk()
root.geometry("500x700")
def dbbutton():
dbfiles = filedialog.askopenfilenames(parent=root, title='Select .DBC File(s)')
dbfiles = root.tk.splitlist(dbfiles)
for file1 in dbfiles:
L1.insert(tk.END, file1)
return dbfiles
def ascbutton():
ascfiles = filedialog.askopenfilenames(parent=root, title='Select .ASC File(s)')
ascfiles = root.tk.splitlist(ascfiles)
for file2 in ascfiles:
L2.insert(tk.END, file2)
return ascfiles
b1 = tk.Button (root, text= "Select Database File(s)", command = dbbutton)
b1.pack()
L1 = tk.Listbox(root, selectmode = "multiple", height = 10, width = 80)
L1.pack()
b2 = tk.Button (root, text = "Select ASC File(s)", command = ascbutton)
b2.pack()
L2 = tk.Listbox(root, selectmode = "multiple", height = 10, width = 80 )
L2.pack()
root.mainloop()
我在函数之外引用这些文件的最有效方法是什么?
解决方案
在函数外部创建文件列表,然后在函数内部附加到它:
ascfile_list = [] # Create list to hold filenames
def ascbutton():
filename_list = filedialog.askopenfilenames(parent=root, title='Select .ASC File(s)')
for filename in filename_list:
L2.insert(tk.END, filename)
ascfile_list.append(filename) # Append filename to list