Problem mit Tkinter Listbox

Fragen zu Tkinter.
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Problem mit Tkinter Listbox

Beitragvon jocsch » Sonntag 31. August 2003, 22:54

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
Benutzeravatar
wuf
User
Beiträge: 1368
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Montag 1. September 2003, 01:22

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
Take it easy Mates!
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: Problem mit Tkinter Listbox

Beitragvon Voges » Montag 1. September 2003, 09:46

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
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Problem gelöst

Beitragvon jocsch » Mittwoch 3. September 2003, 22:53

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
danielgoehl
User
Beiträge: 2
Registriert: Mittwoch 11. Februar 2004, 14:10
Wohnort: SB

Beitragvon danielgoehl » Mittwoch 11. Februar 2004, 14:55

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
docsnyder
User
Beiträge: 7
Registriert: Freitag 12. Dezember 2003, 07:56
Wohnort: Linden/Hess.

Tkinter Listbox

Beitragvon docsnyder » Mittwoch 11. Februar 2004, 16:04

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
docsnyder
User
Beiträge: 7
Registriert: Freitag 12. Dezember 2003, 07:56
Wohnort: Linden/Hess.

oops- verrutscht

Beitragvon docsnyder » Mittwoch 11. Februar 2004, 16:08

hi,
da waren soeben die Einrueckungen der Zeilen unter den beiden Funktionen verrutscht.

mfg
docsnyder
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Re: oops- verrutscht

Beitragvon Milan » Mittwoch 11. Februar 2004, 16:12

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
danielgoehl
User
Beiträge: 2
Registriert: Mittwoch 11. Februar 2004, 14:10
Wohnort: SB

Beitragvon danielgoehl » Mittwoch 11. Februar 2004, 18:12

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!!
PappaBär83
User
Beiträge: 21
Registriert: Freitag 5. September 2014, 09:16

Re: Problem mit Tkinter Listbox

Beitragvon PappaBär83 » Samstag 27. Juni 2015, 14:06

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=python file=Untitled.py]
def anzeige():
AwL["text"] = Hsli.get("active")
[/code]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder