Seite 1 von 1

Anfängerfrage Dateibrowser

Verfasst: Samstag 13. Dezember 2003, 11:17
von spittlebug
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)

Re: Anfängerfrage Dateibrowser

Verfasst: Samstag 13. Dezember 2003, 19:40
von Voges
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

Script formatiert

Verfasst: Samstag 13. Dezember 2003, 20:07
von spittlebug
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()

Re: Script formatiert

Verfasst: Sonntag 14. Dezember 2003, 13:15
von Voges
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

danke

Verfasst: Sonntag 14. Dezember 2003, 16:41
von spittlebug
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