Ich habe zur Zeit ein kleines Problem in meiner ersten wirklichen GUI-Entwicklung für ein Shell-Programm von mir.
Zusammengefasst soll mein Programm am Ende eine 'Liste' darstellen mit dem kompletten Inhalt des Ordners und bei Bedarf sollen die Bilder und PDF-Dateien auch geöffnet werden können.
Das Problem ist, dass sozusagen im Hintergrund der GUI ein eigen geschriebenes Programm läuft, welches die ganze Zeit Daten herunterlädt (Thema 'Threading' wahrscheinlich) und in dem bestimmten Ordner abspeichert.
Ich stelle mir gerade die Frage, wie ich mit Hilfe von Tkinter es erstmal so hinbekommen kann, das meine Listbox die ich generiert habe, auch jedesmal ein 'Update' bekommt, so dass der neue Inhalt auch in die Listbox rein kommt.
Ich hänge schon einmal mein Quellcode hier an, um schon einmal zu zeigen, dass das rudimentäre um die Listbox herum läuft.
Für Anregungen bzgl. des Problems oder allg. Code-Verbesserung bin ich jederzeit offen.
Mit freundlichen Gruß
mopmopen
Code: Alles auswählen
from tkinter.ttk import Button, Style
from tkinter.filedialog import askdirectory
from tkinter import Frame, Tk, BOTH, Listbox, END, SINGLE, RIGHT, Y, BOTTOM
from os import listdir
__author__ = 'mopmopen'
__version__ = 0.1
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, background="black")
self.parent = parent
self.quitButton = Button(self, text="Quit!", command=self.quit)
self.listbox = Listbox(self, selectmode=SINGLE,bg = "black",fg='green')
self.current = ()
self.current_directory = askdirectory()
self.initUI()
def initUI(self):
self.parent.title("ICQ-Crawler")
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
self.quitButton.pack(side=BOTTOM)
self.listbox.pack(side=RIGHT, fill=Y)
self.directory_content = listdir(self.current_directory)
for item in enumerate(self.directory_content):
self.listbox.insert(END, item)
self.poll()
def poll(self):
now = self.listbox.curselection()
if now != self.current:
self.list_has_changed(now)
self.current = now
self.after(250, self.poll)
def list_has_changed(self, selection):
print(selection[0])
def main():
root = Tk()
root.geometry("500x500")
app = Example(root)
root.mainloop()
if __name__ == '__main__':
main()