Tkinter listbox erhalten Attributfehler

Ich habe meinen Kopf gegen eine Wand geschlagen. Nur die Seile von Tkinter zu bekommen, folgte ein Tutorial, um die Grundlagen zu bekommen, jetzt arbeiten wir vor, um meine eigenen Sachen zu implementieren. Ich schaffe eine Abfrage-Schnittstelle für einige Arbeit, die ich tue. Ich habe drei Listenfelder auf dem Bildschirm, und ich muss die Auswahl von allen drei auf Knopf klicken, also kann ich eine Abfrage erzeugen und einige Daten anzeigen.

Der Fehler, den ich empfange, scheint zu sagen, dass es mapLBox nicht sehen mapLBox , was ein Bereichsproblem anzeigt. Wenn ich den Code auf etwas einfaches wie print self.mapLBox.get(Tkinter.ACTIVE) , wird es immer noch den gleichen Attributfehler print self.mapLBox.get(Tkinter.ACTIVE) . Alle Boxen und Scrollbars zeichnen sich richtig auf den Bildschirm, und mit der falschen Linie (# 90) kommentiert, läuft es gut.

Es gibt zwei Klassen, simpleApp_tk ( PasteBin ), zu dem alle untergeordneten Code gehört, und dbtools die Abfragen auf dem DB dbtools und Ergebnisse zurückgibt.

Der Fehler:

 Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1473, in __call__ return self.func(*args) File "test.py", line 90, in OnButtonClick self.labelVar.set(self.mapLBox.get(self.mapLBox.curselection()[0])) File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1829, in __getattr__ return getattr(self.tk, attr) AttributeError: mapLBox 

Innerhalb meiner initialise (laufen von __init__ ) werden die Listen und die Schaltfläche erstellt:

 button = Tkinter.Button(self,text=u"Click Me",command=self.OnButtonClick) button.grid(column=1,row=0) # Make a scrollbar for the maps list scrollbar2 = Tkinter.Scrollbar(self,orient=Tkinter.VERTICAL) scrollbar2.grid(column=2,row=2,sticky='EW') # Create list of maps mapLBox = Tkinter.Listbox(self,selectmode=Tkinter.SINGLE,exportselection=0, yscrollcommand=scrollbar2.set) scrollbar2.config(command=mapLBox.yview) mapLBox.grid(column=2,row=2,sticky='EW') # Populate map list nameList = self.db.getMapNameList() IDList = self.db.getMapIDList() for count, name in enumerate(nameList): nameFormat = str(IDList[count][0])+': '+name[0] mapLBox.insert(Tkinter.END,nameFormat) self.grid_columnconfigure(0,weight=1) # Allow resizing of window self.resizable(True,True) # Contrain to only horizontal self.update() self.geometry(self.geometry()) 

Die OnButtonClick Methode, die an meine Schaltfläche angehängt ist:

 def OnButtonClick(self): self.labelVar.set(self.mapLBox.get(self.mapLBox.curselection()[0])) return 

  • Töten eines Multiprocess-Pools mit einem tkinter-Button
  • Hinzufügen einer Bildlaufleiste zu einem Rahmen mit Tkinter (Python)
  • Größe von Bildern mit ImageTk.PhotoImage mit Tkinter / Python
  • Nice IDE mit GUI Designer für wxPython oder Tkinter
  • TKinter-Fensterrahmen ändern
  • Tkinter.PhotoImage unterstützt kein png-Bild
  • TK_LIBRARY und TCL_LIBRARY Umgebungsvariablen auf Ubuntu
  • Wie kann ich die Breite eines String-Renderings über tkFont messen, ohne ein Fenster zuerst zu erstellen?
  • One Solution collect form web for “Tkinter listbox erhalten Attributfehler”

    Sie greifen auf self.mapLBox aber Sie definieren nicht self.mapLBox . Nur weil Sie eine Variable namens mapLBox erstellen, mapLBox das nicht automatisch ein Attribut des Objekts.

    Sie müssen das ändern:

     mapLBox = Tkinter.Listbox(...) 

    … dazu:

     self.mapLBox = Tkinter.Listbox(...) 

    … und natürlich ändern sie die anderen Orte, wo Sie auf mapLBox .

    Python ist die beste Programmiersprache der Welt.