Seite 1 von 1

Problem mit Tkinter Listbox

Verfasst: Sonntag 31. August 2003, 22:54
von jocsch
Hallo Leute!
Ich habe irgendwie ein kleines Problemchen mit dem Tkinter-Listbox-Widget: folgender ...

Code: Alles auswählen

from Tkinter import *

class TestBox:
	def __init__(self, master):
		self.lb = Listbox(master, selectmode=SINGLE)
		for a in range(10):
			self.lb.insert(END, str(a))
		self.lb.pack()
		self.lb.bind('<Double-Button-1>', self.doSomething)
		
	def doSomething(self, event):
		auswahl = self.lb.curselection()[0]
		print self.lb.get(auswahl)
		
if __name__=="__main__":
	root = Tk()
	testbox = TestBox(root)
	root.mainloop()
verursacht beim Doppelklick auf einen Listeneintrag folgende Fehlermeldung:

Exception in Tkinter callback
Traceback (most recent call last):
File "/var/tmp/python-2.2.2-build//usr/lib/python2.2/lib-tk/Tkinter.py", line 1299, in __call__
args = apply(self.subst, args)
File "/var/tmp/python-2.2.2-build//usr/lib/python2.2/lib-tk/Tkinter.py", line 1035, in _substitute
e.height = getint(h)
ValueError: invalid literal for int(): ??


Kennt das jemand?
Wo liegt mein Problem???

Ganz vielen Dank im voraus

Jochen

Verfasst: Montag 1. September 2003, 01:22
von wuf
Hallo Jochen

Ich habe Dein Listboxprogramm ausprobiert und
bei mir funktioniert es korrekt. Arbeite aber
mit Windows 2000. Wie ich sehe hast Du das List-
boxprogramm unter Linux laufen lassen. Unter
SuSE 8.2 Linux habe ich den genau gleichen Effekt.
Hingegen läuft es unter SuSE 7.2 korrekt. Mit eigenen
Programmen habe ich unter SuSE 8.2 Linux gleiche
Problem. Es muss etwas mit dem Callback nicht korrekt
ablaufen. Vielleicht ist dieses Problem gewissen Linux-
Leuten schon Bekannt. Solltes Du etwas darüber erfahren
währe ich auch interessiert.

Gruss Fritz

Re: Problem mit Tkinter Listbox

Verfasst: Montag 1. September 2003, 09:46
von Voges
Hallo!
jocsch hat geschrieben:Kennt das jemand?
Du hast vermutlich Tcl/Tk 8.4.x auf Deinem Rechner. Die Version ist inkompatibel mit fast allen Python-Versionen. Ich glaub', Python-Version 2.3 funktioniert erst wieder.
Möglichkeiten:
- Update auf Python 2.3 (oder nur Tkinter.py ersetzen durch die aus der 2.3-Version; soll auch gehen)
- Downgrade auf Tcl/Tk 8.3.x
- Tkinter.py patchen. getint() wird nämlich hin und wieder mit '??' gefüttert, was den Fehler auslöst. Könnte man durch if- oder try-Blöcke drumherum verhindern.

Jan

Problem gelöst

Verfasst: Mittwoch 3. September 2003, 22:53
von jocsch
Hallo Jan!
Upgrade auf Python 2.3 war die Lösung des Problems. Netter Nebeneffekt: Die subjektiv empfundene Geschwindigkeitssteigerung gegenüber 2.2.2 liegt deutlich über 30% !!!

Vielen Dank nochmal,

Jochen

Verfasst: Mittwoch 11. Februar 2004, 14:55
von danielgoehl
Hi Leutz!!

Ich bastel auch gerade mit der Listbox rum. Dieser Beitrag hat mir schon sehr geholfen. Aber gibt es vieleicht eine möglichkeit das ich den Index bekomme von dem Element auf das ich gerade klicke?? Also das gleiche nur das ich beim auswählen des Eintrag diesen zurück bekomme??

Vielen Dank

Daniel

Tkinter Listbox

Verfasst: Mittwoch 11. Februar 2004, 16:04
von docsnyder
Hi,
meinst Du sowas:
---

Code: Alles auswählen

import sys
from Tkinter import *

def ende():
    sys.exit(0)

def anzeigen():
    lb["text"] = "Auswahl: " + li.get("active")

hauptfenster = Tk()

# Listbox mit vier Einträgen
li = Listbox(hauptfenster, height=0)
li.insert("end","Hamburg")
li.insert("end","München")
li.insert("end","Berlin")
li.insert("end","Dortmund")
li.pack()

# Auswahl anzeigen lassen
bshow = Button(hauptfenster, text = "Anzeigen", command = anzeigen)
bshow.pack()

# Anzeigelabel
lb = Label(hauptfenster, text = "Auswahl:")
lb.pack()

bende = Button(hauptfenster, text = "Ende", command = ende)
bende.pack()

hauptfenster.mainloop()
---
ist aus dem Buch von T.Theis


mfg
docsnyder

oops- verrutscht

Verfasst: Mittwoch 11. Februar 2004, 16:08
von docsnyder
hi,
da waren soeben die Einrueckungen der Zeilen unter den beiden Funktionen verrutscht.

mfg
docsnyder

Re: oops- verrutscht

Verfasst: Mittwoch 11. Februar 2004, 16:12
von Milan
docsnyder hat geschrieben:hi,
da waren soeben die Einrueckungen der Zeilen unter den beiden Funktionen verrutscht.

mfg
docsnyder
Hi. Ich habs korrigiert, indem ich die [ code ] tags eingefügt habe. Bitte das nächste mal beachten.

@danielgoehl: eigentlich ist doch das genau das gleiche wie ganz oben im code, oder? Da wird doch auch erst abgefragt, was gearde markiert ist (self.lb.curselection()) und zurückgegeben werden die Indexe (ist das der Plural von Index :?: ). Die Werte bekommt man dann, indem man gerade diese Indexe abfragt.

Milan

Verfasst: Mittwoch 11. Februar 2004, 18:12
von danielgoehl
Ahhh!

Danke schonmal für eure schnellen antworten!! Ich hab volgendes Beispiel gebaut, nach euren vorschlägen.

Code: Alles auswählen

import sys
from Tkinter import *

def ende():
    sys.exit(0)

def anzeigen(e):
    lb["text"] = "Auswahl: " + li.get("active")

hauptfenster = Tk()
# Listbox mit vier Einträgen
li = Listbox(hauptfenster, height=0)
li.bind("<Button 1>", anzeigen)
li.pack()
li.insert("end","Hamburg")
li.insert("end","München")
li.insert("end","Berlin")
li.insert("end","Dortmund")


        # Anzeigelabel
lb = Label(hauptfenster, text = "Auswahl:")
lb.pack()

bende = Button(hauptfenster, text = "Ende", command = ende)
bende.pack()

hauptfenster.mainloop()
Dieses allein läuft super und tut was ich möchte. Ich in meinem Projekt jedoch alles in Objekte gepackt. Und irgendwie läuft das nich so rund, da ich nur den Index des zuletzt "geklickten" eintrages erhalte!! Obwohl ich alles so übertragen hab, wie og.

Folgender Quelltext produziert diesen Fehler:

Code: Alles auswählen

import sys
from Tkinter import *

class test:
        def __init__(self):
                self.createWindow()


        def ende(self):
                sys.exit(0)

        def anzeigen(self, e):
                self.lb["text"] = "Auswahl: " + self.li.get("active")

        def createWindow(self):
                print "hallo"
                self.hauptfenster = Tk()
                # Listbox mit vier Einträgen
                self.li = Listbox(self.hauptfenster, height=0)
                self.li.bind("<Button 1>", self.anzeigen)
                self.li.pack()
                self.li.insert("end","Hamburg")
                self.li.insert("end","München")
                self.li.insert("end","Berlin")
                self.li.insert("end","Dortmund")

                # Anzeigelabel
                self.lb = Label(self.hauptfenster, text = "Auswahl:")
                self.lb.pack()

                bende = Button(self.hauptfenster, text = "Ende", command = self.ende)
                bende.pack()

t = test()
t.hauptfenster.mainloop()
Danke für eure Hilfe!!

Re: Problem mit Tkinter Listbox

Verfasst: Samstag 27. Juni 2015, 14:06
von PappaBär83
ich arbeite derzeit an einer anderen Auflistung wie könnte man den Button betätigen automatisieren? Eine stetige, alleinige abfrage ob die Auswahl geändern wurde und diese gleich anzeigen zu lassen ohne Button zu betätigen?

Code: Alles auswählen

    
def anzeige():
    AwL["text"] = Hsli.get("active")