Python - tkinter и glob.glob работают вместе - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в tkinter и пытаюсь открыть explorer (в Windows), чтобы я мог выбрать, какую папку я хочу использовать в моей программе. Я нашел шаблон для tkinter и изменил его так, чтобы он работал с моей функцией и как мне нужен filepath. Прежде, чем я попытался использовать tkinter для «выбора моей папки», я вручную записал каталог в функцию glob.glob, как это glob.glob(r'C:\Users\Desktop\Spyder\*.log') (и это работало). Таким образом, моя новая идея состояла в том, чтобы заменить ввод имени пути с r'C:\Users\Desktop\Spyder\*.log' на переменную, в которой было сохранено то же имя пути, но теперь он использовал tkinters askdirectory() для нахождения целого в каталоге.

import glob
import os
from itertools import zip_longest
import tkinter as tk
from tkinter import filedialog

#-------------Connect to Access2013------------------ 
class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):

        self.select_folder = tk.Button(self)
        self.select_folder["text"] = "Open WindowsExplorer"
        self.select_folder["command"] = self.ask_directory_to_folder
        self.select_folder.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=root.destroy)
        self.quit.pack(side="bottom")

    def ask_directory_to_folder(self):
        clerdatabase() # a funktion that resets the autonumber and deleats all data from every table
        print("Open!")
        filepath = filedialog.askdirectory()
        log_filepath = "r'"+ str(filepath +"/*.log'")
        right_log_filepath = log_filepath.replace('/','\ ').replace(' ','')
        find_filenames(right_log_filepath)

root = tk.Tk()
app = Application(master=root)
app.mainloop()

#--------------Scan selected folder for .log files and starts to scan files---------
def find_filenames(right_log_filepath): #finds every file in the chosen filepath

    print(right_log_filepath) # r'C:\Users\Desktop\Spyder\*.log'
    print("ok")
    filenames = [] # list for all the found filenames
    for filepath_search in glob.glob(str(right_log_filepath), recursive=True): #A for loop that opens every .log file in the chosen directory folder 
        print('run') 

Моя проблема в том, что я не могу заставить работать for loop filepath_search (выводит "ok"). Но слово run внутри доза цикла не печатать, я думаю, это потому, что оно застряло где-то до этого? Кто-то, кто имеет больше опыта работы с tkinter, может мне помочь? Спасибо

1 Ответ

0 голосов
/ 27 июня 2018

Я предполагаю, что проблема вызвана тем, что передается glob.glob, поскольку он ничего не находит. Похоже, это в основном связано с тем, что вы добавляете ' символов в начале и в конце вашего right_log_filepath.

В ask_directory_to_folder функция заменить:

log_filepath = "r'"+ str(filepath +"/*.log'")
right_log_filepath = log_filepath.replace('/','\ ').replace(' ','')
find_filenames(right_log_filepath)

С:

from os import path  # should be at the top of your file
log_filepath = path.join(filepath, "*.log")
find_filenames(log_filepath)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...