Показать текст в списке Tkinter - PullRequest
1 голос
/ 20 октября 2019

У меня есть небольшой скрипт на python3, где я хочу ввести путь в записи Tkinter и, нажав кнопку Tkinter, показать содержимое пути, используя метод os.walk (),в списке. У меня есть проблема с тем, как я покажу печать «прогулки» в списке. Вот код, который у меня есть:

import os
from tkinter import *
import re


class TKWindow:
    def __init__(self, window):
        self.window = window
        self.window.wm_title("List of folders , subfolders and files.")

        line1 = Label(new_window, text='Enter path to explore:')
        line1.grid(row=0, column=1)

        self.title = StringVar()
        self.entry1 = Entry(new_window, textvariable=self.title, width=30)
        self.entry1.grid(row=0, column=2)

        button1 = Button(new_window, text='Show Contents', width=15, command=lambda: self.populate_list_box())
        button1.grid(row=0, column=3)

        self.content_list = Listbox(new_window, height=25, width=69)
        self.content_list.grid(row=2, column=1, rowspan=5, columnspan=5)

        scrollbar1 = Scrollbar(new_window)
        scrollbar1.grid(row=2, column=6, rowspan=6)

        self.content_list.configure(yscrollcommand=scrollbar1.set)
        scrollbar1.configure(command=self.content_list.yview())

        self.content_list.bind(self.show_contents_of_folder)

    def show_contents_of_folder(self):
        path = self.retrieve_input()
        list_of_contents = []
        for foldername, subfolders, filenames in os.walk(path):
            list_of_contents.append('Current Folder:' + foldername)

            for subfolder in subfolders:
                list_of_contents.append('Subfolder of:' + foldername + ':' + subfolder)

            for filename in filenames:
                list_of_contents.append('Files inside:' + foldername + ':' + filename)
        return list_of_contents

    def retrieve_input(self):
        input_value = self.entry1.get()
        path_re = re.compile(r'.\\')
        path_re.sub('\\\\', input_value)
        return input_value

    def populate_list_box(self):
        lst = self.show_contents_of_folder()
        for i in lst:
            self.content_list.insert(i, END)

Это ошибка, которую я получаю:

Exception in Tkinter callback
Traceback (most recent call last):
File "D:\Downloads\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__return self.func(*args)
File "D:/Downloads/Python Projects/Organising_Files/Walking_a_directory_with_OS_module.py", line 18, in <lambda>
button1 = Button(new_window, text='Show Contents', width=15, command=lambda: self.populate_list_box())
File "D:/Downloads/Python Projects/Organising_Files/Walking_a_directory_with_OS_module.py", line 54, in populate_list_box self.content_list.insert(i, END)
File "D:\Downloads\Python\Python37\lib\tkinter\__init__.py", line 2806, in insert
    self.tk.call((self._w, 'insert', index) + elements)
_tkinter.TclError: bad listbox index "Current Folder:D:\Downloads\Word PDF files\Programming": must be active, anchor, end, @x,y, or a number

Извините, если это общий вопрос, но я не смог найти ответ, которыйменя устраивает, я новичок в питоне и сейчас учусь. Спасибо за ваше время.

1 Ответ

0 голосов
/ 21 октября 2019

Обновите ваш populate_list_box, как показано ниже, чтобы вставить данные в список:

def populate_list_box(self):
    lst = self.show_contents_of_folder()
    self.content_list.insert(END, *lst)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...