2015-04-02 2 views
0

Я видел пару сообщений, похожих на мой вопрос, но не совсем так, поэтому извиняюсь, если это повторяющийся вопрос.Как я могу автоматически обновлять свой список в tkinter?

Я использую tkinter для чтения папки, создаю список, в котором перечислены все файлы (все они будут файлами .tif), и пользователь выбирает изображение, которое они хотят просмотреть. К сожалению, файлы будут добавлены и удалены, поэтому я хочу обновить свой список автоматически. Вот некоторые из кода, который у меня есть до сих пор:

from tkinter import * 
from PIL import Image, ImageTk 
import os 

file_path = "C:/Users/USX27512/Desktop/Python UI/Test_TIFFs" 
root = Tk() 

class Application(Frame): 
    def __init__(self, master): 
     Frame.__init__(self, master) 
     os.chdir(file_path) 
     self.grid() 
     self.canv = Canvas(self, relief=SUNKEN) 
     self.canv.grid(row=2, column=1, columnspan=5, sticky=N) 
     self.canv.config(width=500, height=500) 
     self.canv.config(highlightthickness=0, background="black") 
     self.view_files() 

    def view_files(self): 
     lb = Listbox(self, height=20) 
     lb.update_idletasks() 
     files = sorted(os.listdir(file_path), key=lambda x: os.path.getctime(os.path.join(file_path, x))) 
     for file in files: 
      if os.path.isfile(os.path.join(file_path, file)): 
       lb.insert(END, file) 

     lb.bind("<Double-Button-1>", self.on_double) 
     lb.grid(row=2, column=0, sticky=NW) 

    def on_double(self, event): 
     widget = event.widget 
     selection = widget.curselection() 
     value = widget.get(selection[0]) 

     sbarV = Scrollbar(self, orient=VERTICAL) 
     sbarH = Scrollbar(self, orient=HORIZONTAL) 
     sbarV.config(command=self.canv.yview) 
     sbarH.config(command=self.canv.xview) 
     self.canv.config(yscrollcommand=sbarV.set) 
     self.canv.config(xscrollcommand=sbarH.set) 
     sbarV.grid(row=2, column=6, sticky=N+S) 
     sbarH.grid(row=3, column=1, columnspan= 5, sticky=E+W) 

     self.im = Image.open(value) 
     image_width, image_height = self.im.size 
     self.canv.config(scrollregion=(0, 0, image_width, image_height)) 
     self.im2 = ImageTk.PhotoImage(self.im) 
     self.imgtag = self.canv.create_image(0,0, anchor=NW, image=self.im2) 

app = Application(root) 
root.mainloop() 

Любые предложения?

+0

Вы спрашиваете, как автоматически проверять изменения файловой системы? Вы спрашиваете, как обновить список после его создания? С какой проблемой вы сталкиваетесь? –

+0

@BryanOakley Я знаю, как изменить список, я считаю, что ищу автоматическую проверку изменений файловой системы. Мое понимание tkinter заключается в том, что mainloop сидит и ждет изменений, может быть, это кнопка, нажимающая клавишу ввода клавиатуры, а затем она прокручивается и вносит изменения, а затем снова ждет. Итак, как мне изменить файловую систему, чтобы сообщить mainloop о том, как это изменить? – awwende

ответ

1

Наконец-то я смог найти ответ here. Из этой функции я могу проверить список и обновить его по мере необходимости.

Смежные вопросы