Anfängerfrage Dateibrowser

Fragen zu Tkinter.
Antworten
spittlebug
User
Beiträge: 7
Registriert: Samstag 13. Dezember 2003, 10:37

Hallo,

ich habe hier ein Script, was mal ein einfacher Dateibrowsers werden soll und :?: daß die ersten 20 Dateien des aktuellen Verzeichnisses anzeigt. Wie kann ich beim Aufruf der Funktion setBP , die an den Button gekoppelt ist, die Anzeige der Dateien löschen und den Zähler um eins hochsetzen? Dazu muß ich doch sicher der Funktion das k mitgeben.

#########################

import Tkinter, ImageTk, Image
from Tkconstants import *
import os, os.path

act_dir = os.getcwd()

filelist = []

for i in os.listdir(act_dir):
if os.path.isfile(i):
filelist.append(i)

tk = Tkinter.Tk()

frame1 = Tkinter.Frame(tk, relief = RIDGE, borderwidth = 2)
frame1.pack(fill = BOTH, expand = 1, side = "left")

label_file = Tkinter.Label(frame1, text = 'Dateien')
label_file.pack(fill = X, anchor = W)

file_labellist = []

def setBP():
?????

k = 0
for item in filelist[k:k+20]:
label = Tkinter.Label(frame1, text = item)
file_labellist.append(label)
label.pack(fill = X, anchor = W)

buttonUP = Tkinter.Button(frame1, text = "Up")
buttonUP.pack(side = BOTTOM, fill = Y, expand = 0)
buttonUP.config(foreground="blue", background="yellow")
buttonUP.bind('<1>', setBP)
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
spittlebug hat geschrieben:ich habe hier ein Script, was mal ein einfacher Dateibrowsers werden soll
Vielleicht kannst Du Deinen Beitrag nochmal editieren, so dass die Einrückungen stimmen. Dafür musst Du den Code zwischen die Tags [ code ] und [ /code ] packen (ohne die Leerzeichen). Und wenn der Code dann noch 'out of the box' läuft, ist man doch eher geneigt, sich das anzugucken.

Jan
spittlebug
User
Beiträge: 7
Registriert: Samstag 13. Dezember 2003, 10:37

Danke, Jan, für den Hinweis. Da hatte ich gar nicht drauf geachtet. Hier ist der Quelltext nochmal formatiert. Das Progrämmchen soll per Button-Druck in der Dateiliste browsen (hoch- bzw. herunterzählen), nicht mit Scrollbars.


Code: Alles auswählen

import Tkinter, ImageTk, Image
from Tkconstants import *
import os, os.path

act_dir = os.getcwd()

filelist = []
 
for i in os.listdir(act_dir):
    if os.path.isfile(i):
         filelist.append(i)

tk = Tkinter.Tk()

frame1 = Tkinter.Frame(tk, relief  = RIDGE, borderwidth = 2)
frame1.pack(fill = BOTH, expand = 1, side = "left")

label_file = Tkinter.Label(frame1, text = 'Dateien')
label_file.pack(fill = X, anchor = W)

file_labellist = []

def setBP():
   ?????

k = 0
for item in filelist[k:k+20]:
    label = Tkinter.Label(frame1, text = item)
    file_labellist.append(label)
    label.pack(fill = X, anchor = W)
    
buttonUP = Tkinter.Button(frame1, text = "Up")
buttonUP.pack(side = BOTTOM, fill = Y, expand = 0)
buttonUP.config(foreground="blue", background="yellow")
buttonUP.bind('<1>', setBP)

Tkinter.mainloop()
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hi!
Hier ein Vorschlag, ohne Deinen Code zu sehr zu ändern:

Code: Alles auswählen

...
file_labellist = []

def setBP(e):
    global k
    if k+20 < len(filelist):
        k += 1
        show20files(k)
    
def show20files(k):
    for i,item in enumerate(filelist[k:k+20]):
        file_labellist[i].config(text=item)
    
k = 0
for item in range(0,20):
    label = Tkinter.Label(frame1)
    file_labellist.append(label)
    label.pack(fill = X, anchor = W)
    
show20files(k)
   
buttonUP = Tkinter.Button(frame1, text = "Up")
...
Ist allerdings alles andere als schön (nicht zuletzt des global k wegen).
Das Füllen der Labels geschieht in einer Funktion, da das ja eine immer wiederkehrende Aufgabe ist. Erzeugt werden die Labels dagegen nur einmal.

Deutlich besser wäre es allerdings, die Labelliste und deren Scroll-Funktionalität in einer Klasse zu kapseln.

Jan
spittlebug
User
Beiträge: 7
Registriert: Samstag 13. Dezember 2003, 10:37

Hi Jan,

vielen Dank für die Hilfe. Hab's eingebaut und das gleiche noch für die Verzeichnisse gemacht. Funktioniert astrein. Ist für den Anfang erst einmal ok. Versuche mich im Laufe der Zeit zu steigern.

Thomas
Antworten