Hey,
ich weiß nicht genau obs hierreinkommt oder in das Allgemeine Fragen-Forum, aber das Problem liegt(denke ich) eher im Tkinter Bereich. Jetzt zu meinem Problem:
Ich habe eine Listbox, die mit einer Liste gefüllt wird. Nachdem die Listbox gefüllt ist soll man in der Listbox die Einträge auswählen können und dann diese Einträge aus der Liste(und somit auch aus der Listbox entfernen). Wie würde ich das am besten/einfachsten machen? Das schwierige(für mich) dabei ist, diesen speziellen ausgewählten Eintrag aus der Liste zu entfernen, die Listbox fülle ich einfach neu, nachdem ich den Eintrag aus der Liste gelöscht habe.
Danke schonmal im Vorraus!
Eintrag aus Liste durch curselection in einer Listbox
Hallo Ande
Hier eine mögliche Variante zum herumspielen und verbessern:
Gruß wuf 
Hier eine mögliche Variante zum herumspielen und verbessern:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import Tkinter as tk
#~~ Lade den Dateiname dieses Skriptes
script_name = sys.argv[0]
#~~ Konstanten für die Abmessungen des Hauptfensters
MAIN_WIN_XPOS = 10
MAIN_WIN_YPOS = 10
MAIN_WIN_WIDTH = 200
MAIN_WIN_HEIGHT = 200
#--- Erstelle ein Tk-Hauptfenster ----
app_win = tk.Tk()
app_win.geometry("%dx%d+%d+%d" % (MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT,
MAIN_WIN_XPOS, MAIN_WIN_YPOS))
app_win.title(script_name)
#____ Start Programmabschnitt _________________________________________________#
def process_selection(event):
"""Verarbeitung der Listboxselektion"""
#~~ Alle verfügbaren Elemente in der Listbox
list_elements = listbox.get(0,'end')
#~~ Selektierte Listbox-Elemente
list_selection = listbox.curselection()
#~~ Namenliste der selektierten Listbox-Elemente
selected_elements = list()
for list_index in list_selection:
selected_elements.append(list_elements[int(list_index)])
print 'Selektierte Lisbox-Elemente: ', selected_elements
#~~ Entferne die selektierten Elemente aus der Listbox
for element in selected_elements:
#~~ Liste der noch in der Listbox verbleibenden Elemente
list_elements = listbox.get(0,'end')
#~~ Index des zu löschenden Listbox-Elementes
list_index = list_elements.index(element)
#~~ Entferne Element aus der Listbox
listbox.delete(list_index)
app_frame = tk.Frame(app_win, bd=2, relief='sunken')
app_frame.pack(fill='both', expand='yes')
scrollbar = tk.Scrollbar(app_frame)
scrollbar.pack(side='right', fill='y')
listbox = tk.Listbox(app_frame, bd=0, selectmode='multiple')
listbox.pack(fill='both', expand='yes')
listbox.bind('<Return>', process_selection)
for index in range(50):
listbox.insert('end', 'Element-%d' % index)
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)
#____ End Programmabschnitt ___________________________________________________#
app_win.mainloop()

Take it easy Mates!
Ich würde das löschen etwas einfacher halten:
Oder je nach komplexität eine eigene Listbox von der Tk-Listbox ableiten und die Liste an die Box binden. So dass immer nur die Liste bearbeitet wird und dann jeweils einmal aktuallisiert wird. Bei allzu großen Listen wäre das aber nicht empfehlenswert.
Code: Alles auswählen
from functools import partial
import Tkinter as tk
def remove(listbox, alist):
for index in reversed(map(int, listbox.curselection())):
del alist[index]
listbox.delete(index)
def update(listbox, alist):
listbox.delete(0, "end")
listbox.insert("end", *alist)
if __name__ == "__main__":
mylist = [1, "a", 3, "Hello World", 5.1, 27, "\xfc\xf6\xe4\xdf"]
root = tk.Tk()
listbox = tk.Listbox(root, selectmode="multiple")
listbox.pack()
update(listbox, mylist)
delete = partial(remove, listbox, mylist)
button = tk.Button(root, text="Delete", command=delete)
button.pack()
root.mainloop()
Hallo Ande
Meines funktioniert aber auch
Was ich von dir noch nicht so super finde ist, dass du in diesem Forum noch keine einzige Zeile in Python präsentiert hast!
Übrigens bei ägyptischen (unicode) Zeichen wie:
braucht es bei manchen Installationen folgendes damit es sichtbar in eine Listbox eingetragen werden kann:
Viel Spass mit Python & Tkinter
Gruß wuf
Meines funktioniert aber auch

Was ich von dir noch nicht so super finde ist, dass du in diesem Forum noch keine einzige Zeile in Python präsentiert hast!
Übrigens bei ägyptischen (unicode) Zeichen wie:
Code: Alles auswählen
"\xfc\xf6\xe4\xdf"
Code: Alles auswählen
u"\xfc\xf6\xe4\xdf"
Gruß wuf

Take it easy Mates!
@wuf: Ägyptische Zeichen!? Das sollen wahrscheinlich eher Umlaute und ein „sz” sein.
Ja, hatte das 'u' davor vergessen. (oder ich hätte das 'T' bei Tkinter klein machen müssen)
@wuf
Du hattest das wohl aus dem Wortklang kurz mit kryptische Zeichen verwechselt.
@wuf
Du hattest das wohl aus dem Wortklang kurz mit kryptische Zeichen verwechselt.

Hallo Xynon1
Gruß wuf
Du hast natürlich recht. Meine Hochachtung vor der ägyptischen Kultur. Ich wollte sie mit meinem Wortklang auf keinen Fall in Misskredit bringen.Xynon1 hat geschrieben:Du hattest das wohl aus dem Wortklang kurz mit kryptische Zeichen verwechselt.
Übrigens funktioniert es bei mir unter Windows 7 & Python 2.6 mit 'T' auch ohne ''u' davor.Xynon1 hat geschrieben:Ja, hatte das 'u' davor vergessen. (oder ich hätte das 'T' bei Tkinter klein machen müssen)
Gruß wuf

Take it easy Mates!
@wuf: Aber auch nur weil die Kodierung vom System zufällig passt. Bei mir — Linux auf UTF-8 eingestellt — funktioniert es nicht.
@BlackJack: Beim mir unter Linux-Kubuntu & Python 2.6 funktioniert es auch nicht ohne ein 'u' davor.
Um sicher zu sein probierte ich das Skript von Xynon1(da praktisch immer fehlerfreie und intelligente Codierung) auch unter Windows aus und stellte fest, dass es wirklich auch ohne das 'u' geht. Ich arbeite nur im äussersten Notfall unter Windows.
Gruß wuf
Um sicher zu sein probierte ich das Skript von Xynon1(da praktisch immer fehlerfreie und intelligente Codierung) auch unter Windows aus und stellte fest, dass es wirklich auch ohne das 'u' geht. Ich arbeite nur im äussersten Notfall unter Windows.
Gruß wuf

Take it easy Mates!
Ja, weil Windows standardgemäß ANSI nutzt und das auch in den Tk-Libs, deswegen geht es unter egal welchem Windows auch ohne das 'u'. (Ich arbeite auch nicht gern mit Windows, aber man hat leider nicht immer ein Wahl)
Ich habe es noch nicht, und werde es auch nicht versuchen, aber wenn du dein Linux auf ANSI Kodierung umstellst sollte es dennoch nicht ohne 'u' funktionieren.
Ich habe es noch nicht, und werde es auch nicht versuchen, aber wenn du dein Linux auf ANSI Kodierung umstellst sollte es dennoch nicht ohne 'u' funktionieren.
Werde es auch nicht versuchen.Xynon1 hat geschrieben:Ich habe es noch nicht, und werde es auch nicht versuchen, aber wenn du dein Linux auf ANSI Kodierung umstellst sollte es dennoch nicht ohne 'u' funktionieren.
Geleitet vom Slogan: Never change a perfectly running system!
Updates werden bei mir behandelt wie Ware in Gebinden die mit einer Giftklasse versehen sind. Ab in die Quarantäne-Station.
Gruß wuf

Take it easy Mates!