我是Python的新成员,我试图创建一个列表框来显示子目录中文件的名称。在
我已经知道了如何显示文件名,但只显示在shell上,我希望它们位于列表框中,这样用户就可以选择一个文件,然后单击一个按钮在画布上显示它的内容。在
有什么想法吗?到目前为止,我得到的是:
import os
import fnmatch
from Tkinter import *
root=Tk()
root.title("Reader")
def open_book():
for file in os.listdir("/txtbooks"):
if fnmatch.fnmatch(file, '*.txt'):
print file
OpenBook=Button(root, text="Open Book",command=open_book)
booknames=(open_book)
listbox=Listbox(root,selectmode=BROWSE)
listbox.insert(END,booknames)
label= Label(root, text="Select a book")
label.pack()
listbox.pack()
OpenBook.pack()
can=Canvas(root,width=500,height=300)
scrollbar=Scrollbar(root)
scrollbar.pack(side=RIGHT,fill=Y)
can.pack()
mainloop()
您的代码有几个问题:
首先,
booknames = (open_book)
没有创建图书列表。它只是返回一个对名为“open_book”的函数的引用。您需要做的是调用函数,如下所示:其次,open_book函数需要返回值,而不是打印出来。例如:
^{pr2}$(*或者,您可以使用yield语句来创建生成器,但由于您刚刚学习,所以我们将尽可能简化它)
第三,要插入多个项,必须将它们作为不同的参数传递给函数。Python有这样一种语法:在调用函数之前,在一个列表前面放一个
*
,以展开列表:上述操作的效果与您这样做的效果相同:
最后,你有一个逻辑问题。您试图在启动时和从按钮调用open_book函数。也许这正是您想要的,但是函数需要在每个上下文中以不同的方式工作。如果您在启动时调用它,您希望它返回一个图书列表。要通过点击按钮使用它,您需要它在列表中插入书籍。在
您可以使用两个函数来完成此操作。第一种方法收集图书列表并返回,第二种方法将它们插入列表中。所以,像这样:
当然,一旦你有了insert_books函数,你应该在两个地方都使用它(假设你想在两个地方都这样做),这样就不会重复“get-a-list-Of-books-and-insert-them”逻辑。在
相关问题 更多 >
编程相关推荐