Ideenvorschlag: Multiple Pfadauswahl

Fragen zu Tkinter.
Antworten
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

Hallo,

ich moechte dem user die Moeglichkeit mehrere Bilder in der Oberflaeche angeben lassen zu koennen. Natuerlich soll das dynamisch sein d.h im prinzip kann nur 2 aber auch z.B 100 eingeben.

Ich dachte vielleichtso:
* Es gibt ein entry wo er den pfad eines Bildes angibt. Ueber einen buttonMenu kann er einen browser dialog oeffnen um das Bild auch manuell aus dem dateisystem zu waehlen. (So wie es halt gaengig ist).
Jetzt gibt es einen zusaetzlichen append button mit dem man dann den ausgewaehlten pfad in ein Textfeld inserten kann - pro Bild wird eine Zeile angehaengt z.B so:
Bild1 = /pfad/zum/ersten/bild/bild1.jpg
Bild2 = /pfad/zum/zweiten/bild/bild.jpg

wenn er nun ein Bild loeschen will soll er einfach eine Zeile rausnehmen.
Spaeter ueberpruefe ich ob jedes Bild einer Zeile auch wirklich existent ist.

Hat jemand bessere Vorschlaege? Bin gern Auge :)

Danke euch!
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Mati,

eine Listbox ist zum Anzeigen und Auswählen ganz gut geeignet. Ansonsten bist Du schon auf dem richtigen Weg. Ich habe diesen Code mit heißer Nadel gestrickt, den kann man sicher noch verbessern und anpassen. Aber ich denke er gibt Dir einen guten Ansatz, wie man das lösen könnte:

Code: Alles auswählen

from Tkinter import *
from tkFileDialog import askopenfilename

tk = Tk()
tk.title("Mehrfachauswahl")

def ausgabe(lResult):
	print "Gewaehlte Dateien:", lResult
	
def create_gui(root, callback):

	def add_name(sName) : listbox.insert(END, sName)

	def search_name()	:
		"""Erfragt einen Dateinamen und gibt laesst ihn der Liste hinzufuegen"""
		sName = askopenfilename()
		if sName: add_name(sName)

	def del_name()		: 
		lSelected = list(listbox.curselection())
		lSelected.reverse()  # rueckwaerts, da sich die Liste beim Loeschen verkuerzt
		for iIndex in lSelected:
			listbox.delete(iIndex)
			
	def rueckgabe():
		lResult = listbox.get(0, END) 
		frame.master.destroy()
		callback(lResult)
	
	frame = Frame(root, bd = 3, relief = SUNKEN)
	frame.grid()
	
	listbox = Listbox(frame, selectmode = MULTIPLE, width = 40, height = 10)
	listbox.grid(row = 1, column = 1, rowspan = 5)
	
	Button(frame, text = "suchen", command = search_name).grid(row = 1, column = 2, sticky = EW)
	Button(frame, text = "entfernen", command = del_name).grid(row = 2, column = 2, sticky = EW)
	Button(frame, text = "Abbruch", bg = "#fbb", command = frame.master.destroy).grid(row = 10, column = 2, sticky = EW)
	Button(frame, text = "Ok", command = rueckgabe).grid(row = 10, column = 1, sticky = EW)
	


create_gui(tk, ausgabe)
tk.mainloop()
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

super genau was ich gesucht habe :D

danke!
Antworten