我想创建一个列表框,该列表框将显示文件夹目录中的内容。
如果我在os.listdir()函数中手动输入目录,则可以执行此操作。但是,当我要分配一个浏览按钮时,该按钮应该位于所选目录中,因此我无法在listdir函数中使用其字符串,甚至无法在主GUI函数中进行打印。所以我得到了流行的错误:
[AttributeError:'_tkinter.tkapp'对象没有属性'dirname']
我寻找了许多关于在其他函数中使用变量,全局变量等的解决方案,但是我无法提供一个可行的解决方案。我想要的是在按我的浏览按钮并选择文件夹后显示.avi文件。
谢谢,
import tkinter as tk
from tkinter import filedialog
import os
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Label(self, text = "Select a folder", bg="orange", fg="green").grid(row=1, columnspan=3)
tk.Button(self, text = "Browse", command = self.getFolder).grid(row=1, column=4, sticky = tk.W)
self.lbox = tk.Listbox(self)
### problem is here ###
print(self.dirname)
files = os.listdir(self.dirname)
### problem is here ###
tk.Label(self, text = "Select a video", bg="orange", fg="green").grid(row=2, columnspan=3)
self.lbox.grid(rowspan=3,columnspan=3)
for item in files:
if item.endswith(".avi"):
self.lbox.insert(tk.END,item)
def getFolder(self):
self.dirname = filedialog.askdirectory()
#print(self.dirname)
app = SampleApp()
app.mainloop()
问题是,即使在定义self.dirname
之前,您仍在尝试访问它。它首先在getFolder
功能中定义。
因此,选择getFolder
后,请在self.driname
功能中添加所需的所有代码