首页 > 解决方案 > 使用 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()

我在函数之外引用这些文件的最有效方法是什么?

标签: python-3.xtkinterlistbox

解决方案


在函数外部创建文件列表,然后在函数内部附加到它:

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

推荐阅读