Seite 1 von 1
List box
Verfasst: Freitag 8. Juli 2011, 13:26
von jtschoch
Hi
Ich möchte die Auswahl einer Listbox in ein Entry -Wiget ausgebeb lassen.
Ich weiß bloß nicht wie das geht!
Kann mir bitte jemand ein Beispiel machen
Re: List box
Verfasst: Freitag 8. Juli 2011, 15:32
von Xynon1
Re: List box
Verfasst: Samstag 9. Juli 2011, 11:19
von jtschoch
verstehe ich nicht
Re: List box
Verfasst: Samstag 9. Juli 2011, 15:30
von Xynon1
Das kommt davon wenn man die zwei Schritte davor überspringt.
Re: List box
Verfasst: Samstag 9. Juli 2011, 16:53
von wuf
Hi jtschoch
Hier eine mögliche Lösung:
Code: Alles auswählen
#!/usr/bin/env python
## -*- coding: utf-8 -*-
from functools import partial
import Tkinter as tk
def transfer(listbox, entry_data):
sel_index = listbox.curselection()
data = listbox.get(sel_index)
entry_data.set(data)
listbox.selection_clear(sel_index)
def update(listbox, elements):
listbox.insert("end", *elements)
if __name__ == "__main__":
my_list = ['Element-1', 'Element-2', 'Element-3']
app_win = tk.Tk()
#~~ Listbox
listbox = tk.Listbox(app_win, bg='khaki', bd=1, selectmode="single",
highlightthickness=0)
listbox.pack()
update(listbox, my_list)
#~~ Eingabe
entry_data = tk.StringVar()
entry = tk.Entry(app_win, bg='white', bd=1, highlightthickness=0,
textvariable=entry_data)
entry.pack(pady=5)
#~~Schaltflächen
button_frame = tk.Frame(app_win)
button_frame.pack(pady=5)
cmd_transfer = partial(transfer, listbox, entry_data)
button_pack_info = dict(side='left', padx=5)
button_transfer = tk.Button(button_frame, text="Transfer",
command=cmd_transfer)
button_transfer.pack(button_pack_info)
button_exit = tk.Button(button_frame, text="Exit",
command=app_win.destroy)
button_exit.pack(button_pack_info)
app_win.mainloop()
Gruß wuf

Re: List box
Verfasst: Montag 18. Juli 2011, 09:27
von jtschoch
Naja, ich meinte das eigentlich ohne Button.
Es soll beim klicken ausgelöst werden!
Re: List box
Verfasst: Montag 18. Juli 2011, 09:42
von BlackJack
Re: List box
Verfasst: Montag 18. Juli 2011, 09:57
von Xynon1
Hatte ich dir nicht neulich schon so eine Listbox zum Fraß vorgeworfen:
http://www.python-forum.de/viewtopic.ph ... 14#p202314
Re: List box
Verfasst: Montag 18. Juli 2011, 12:48
von wuf
Hi jtschoch
Hast du dir ein bisschen Ferien gegönnt?
jtschoch hat geschrieben:Naja, ich meinte das eigentlich ohne Button.
Super! Dies ist eine Bestätigung, dass du das Skript ausprobiert hast. Es geht aber auch ohne Button. Hier:
Code: Alles auswählen
#!/usr/bin/env python
## -*- coding: utf-8 -*-
from functools import partial
import Tkinter as tk
def transfer(listbox, entry_data, args):
sel_index = listbox.curselection()
data = listbox.get(sel_index)
entry_data.set(data)
listbox.selection_clear(sel_index)
def update(listbox, elements):
listbox.insert("end", *elements)
if __name__ == "__main__":
my_list = ['Element-1', 'Element-2', 'Element-3']
app_win = tk.Tk()
#~~ Listbox
listbox = tk.Listbox(app_win, bg='khaki', bd=1, selectmode="single",
highlightthickness=0)
listbox.pack()
update(listbox, my_list)
#~~ Eingabe
entry_data = tk.StringVar()
entry = tk.Entry(app_win, bg='white', bd=1, highlightthickness=0,
textvariable=entry_data)
entry.pack(pady=5)
cmd_transfer = partial(transfer, listbox, entry_data)
listbox.bind('<ButtonRelease-1>', cmd_transfer)
#~~Schaltflächen
button_frame = tk.Frame(app_win)
button_frame.pack(pady=5)
button_exit = tk.Button(button_frame, text="Exit",
command=app_win.destroy)
button_exit.pack(side='left', padx=5)
app_win.mainloop()
Hier noch eine angepasste Variante des Effbod-Imperiums:
Code: Alles auswählen
import Tkinter as tk
class Dialog(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.list = tk.Listbox(self, selectmode='single', )
self.list.pack(fill='both', expand='yes')
self.current = None
self.entry_data = None
self.poll()
def update(self, list_items):
self.list.insert("end", *list_items)
def poll(self):
sel_index = self.list.curselection()
if sel_index != self.current:
self.current = sel_index
if self.entry_data != None:
self.entry_data.set(self.list.get(sel_index))
self.after(250, self.poll)
if __name__ == "__main__":
my_list_items = ['jtschoch-1', 'jtschoch-2', 'jtschoch-3']
app_win = tk.Tk()
dialog = Dialog(app_win)
dialog.pack()
dialog.update(my_list_items)
entry_data = tk.StringVar()
entry = tk.Entry(app_win, bg='white', bd=1, highlightthickness=0,
textvariable=entry_data)
entry.pack(pady=5)
dialog.entry_data = entry_data
app_win.mainloop()
Xynon1 hat geschrieben:Hatte ich dir nicht neulich schon so eine Listbox zum Fraß vorgeworfen
Raubtiere fressen scheinbar auch nicht alles.
Gruß wuf

Re: List box
Verfasst: Montag 18. Juli 2011, 13:05
von Xynon1
Dieses *Raubtier* wäre in der Wildnis(Web) längst verhungert so wie es sich seine Beute(Quellcode) besorgt, zum Glück gibt es ja Zoos(Foren). Und dann fängt es auch noch an Futter(fertigen Quellcode - sogar schon vorgekaut) zu ignorierenen? :K
Re: List box
Verfasst: Montag 18. Juli 2011, 14:10
von yipyip
Dieses *Raubtier* kann wohl nur in Gesellschaft ziemlich genuegsamer Wiederkaeuer ueberleben

. Deshalb hier nochmal eine Variante mit dem <<ListboxSelect>> Event. (Ganz, ganz unten auf der entspr. Effbot-Seite)
Code: Alles auswählen
import Tkinter as tk
class Gui(object):
def __init__(self):
self.root = tk.Tk()
font = 'Arial', 12, 'bold'
self.list_var = tk.StringVar()
# Use <Shift> and <STRG> to select multiple ranges!
self.listbox = tk.Listbox(self.root, font=font, selectmode=tk.EXTENDED)
self.listbox.pack(fill=tk.BOTH, expand=True)
self.listbox.bind("<Button-1>", self.check)
self.items = []
for i in dir(self.root):
self.listbox.insert(tk.END, i)
self.items.append(i)
self.entry_var = tk.StringVar()
self.entry = tk.Entry(self.root, textvariable=self.entry_var, font=font, width=40)
self.entry.pack(fill=tk.BOTH)
self.listbox.bind('<<ListboxSelect>>', self.check)
def check(self, event):
indices = map(int, self.listbox.curselection())
#print self.listbox.curselection()
self.entry_var.set(' '.join(self.items[i] for i in indices))
def run(self):
self.root.mainloop()
if __name__ == '__main__':
Gui().run()
yipyip
Re: List box
Verfasst: Montag 18. Juli 2011, 17:18
von wuf
Hallo yipyip
Danke für den goldenen Hinweis betreffs '<<ListboxSelect>>'. Wie du siehst nehme ich es auch nicht so genau mit dem durchlesen der Dokumente.

Muss mich unbedingt verbessern. Somit ergibt sich eine weitere Variante:
Code: Alles auswählen
import Tkinter as tk
class Dialog(tk.Listbox):
def __init__(self, parent, entry_var):
self.entry_var = entry_var
tk.Listbox.__init__(self, parent, selectmode='single', )
self.bind('<<ListboxSelect>>', self.change)
def update(self, list_items):
self.insert("end", *list_items)
def change(self, event):
self.entry_var.set(self.get(self.curselection()))
if __name__ == "__main__":
list_items = ['jtschoch-1', 'jtschoch-2', 'jtschoch-3']
app_win = tk.Tk()
entry_var = tk.StringVar()
dialog = Dialog(app_win, entry_var)
dialog.pack(fill='both', expand=True)
dialog.update(list_items)
entry = tk.Entry(app_win, bg='white', textvariable=entry_var)
entry.pack(pady=5)
app_win.mainloop()
Gruß wuf

Re: List box
Verfasst: Donnerstag 21. Juli 2011, 10:54
von jtschoch
Vielen Dank!!!

Jetzt komm ich weiter

Re: List box
Verfasst: Donnerstag 21. Juli 2011, 11:43
von Xynon1
Mit so wenig Informationen wie jetzt ist es nur möglich Puzzelstücke schreiben, vieleicht sagts du uns einfach mal was dein Programm alles können soll, dann schreiben wir es dir auch ganz.
