ich habe eine listbox definiert, und will bei einem mausklick den inhalt der aktuellen box auslesen.
Code: Alles auswählen
x=event.widget.get(ACTIVE)
wie kann man den das beheben?
thx, toni.
Code: Alles auswählen
x=event.widget.get(ACTIVE)
Hi Toni,tuner hat geschrieben:gibt jedoch immer den text des fensters aus, das vorher aktiv war.Code: Alles auswählen
x=event.widget.get(ACTIVE)
wie kann man den das beheben?
Code: Alles auswählen
import Tkinter as TK
class FrameListbox(TK.Frame):
def __init__(self, lEintraege, Command = None):
TK.Frame.__init__(self)
self.lEintraege, self.Command = lEintraege, Command
if self.lEintraege: self.add_elements()
def add_elements(self):
for sEintrag in self.lEintraege:
def LocalCommand(sEintrag = sEintrag): self.Command(sEintrag)
TK.Radiobutton(self,
text = sEintrag,
value = sEintrag,
command = LocalCommand,
indicatoron = False).\
grid(sticky = TK.NSEW,
ipadx = 40,
ipady = 2)
def Ausgabe(sEintrag):
print "Eintrag gewaehlt:", sEintrag
f = FrameListbox(("Hallo", "Welt!", "ein", "einfacher", "Text"), Ausgabe)
f.master.wm_title("Listboxersatz")
f.grid()
Code: Alles auswählen
import Tkinter as tk
def ausgabe(event):
print listbox.get('active')
root = tk.Tk()
listbox = tk.Listbox(root,height=10)
listbox.bind('<Double-Button-1>',ausgabe)
listbox.pack()
for x in range(10):
listbox.insert(tk.END,x)
root.mainloop()
Hi Stephan,Stephan hat geschrieben: eine Möglichkeit wäre auch, die Listbox mit einem Doppelklick abzufragen.
Code: Alles auswählen
import Tkinter as tk
import thread, time
def ausgabe(event = None):
if event: time.sleep(0.01)
print listbox.get('active')
root = tk.Tk()
listbox = tk.Listbox(root,height=10)
def start_after(event): listbox.after(10, ausgabe)
def start_thread(event): thread.start_new_thread(ausgabe, (event,))
listbox.bind('<ButtonRelease-1>', start_after)
#listbox.bind('<ButtonRelease-1>', start_thread)
listbox.pack()
for x in range(10):
listbox.insert(tk.END,x)
root.mainloop()
Das Problem lösen sie alle. Fragt sich nur, welche Kompromisse Du zwischen Codierung und Ausführung/Intuitive Nutzung schließen möchtest. Da es keinen integrierten Change-Event zu geben scheint, wird zumindest eines von beidem aufwendiger.tuner hat geschrieben:
eins davon wird wohl mein Problem lösen.
Ich habe mich mit TKinter noch nicht soo tiefgreifend beschäftigt, aber vielleicht hilft die update-methode. Du kannst eigene Update-methoden schreiben und diese zeitgesteuert aufrufen, oder gebunden an beliebige events. Dazu würde mir spontan die methode bind_class einfallen:tuner hat geschrieben: Nebenbei: gibt es unter Tk keine Möglichkeit, eine 'aktualisiere Frames'-Methode oder ähnliches auszuführen?
Code: Alles auswählen
import Tkinter as TK
def ausgabe(event):
print "%s - Klickposition: (%i, %i)" % (event.widget.wm_title(), event.x, event.y)
tk = TK.Tk()
TK.Label(tk, text = "klick in die Toplevel Fenster").grid(padx = 30, pady = 5)
tk.bind_class("Toplevel", "<1>", ausgabe)
tk.wm_title("Hauptfenster")
wTL1 = TK.Toplevel(tk)
wTL1.wm_title("Toplevel 1")
wTL2 = TK.Toplevel()
wTL2.wm_title("Toplevel 2")
tk.mainloop()