List.insert probleme (Python3.6)

Fragen zu Tkinter.
Antworten
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

Hallo,

ich stoße in Tkinter egal wie ich es mache auf eine Fehler Meldung: "
Traceback (most recent call last):
File "main.py", line 11, in <module>
class tk:
File "main.py", line 16, in tk
Liste.insert(1, "maxmuster")
AttributeError: 'NoneType' object has no attribute 'insert'"

Dies kommt hoch wenn ich folgenden Code laufen lasse:

Code: Alles auswählen

from tkinter import *
class tk:
  root = Tk()
  Liste = Listbox(root).pack()
  Liste.insert(1, "maxmuster")
 
 tk.root.mainloop() 

Nun kann ich in der Listbox nichts anzeigen...
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Der Fehler ist, dass Du auf das Listbox-Objekt sofort die Methode pack aufrufst. Diese gibt aber None zurück.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@Felix Eckert: Sterncheimporte sind böse, weil Du nicht kontrollieren kannst, was denn da in Deinen Namensraum importiert wird. Normalerweise nimmt man "import tkinter as tk" und referenziert alle Namen über "tk." also zum Beispiel tk.Tk.

Du mißbrauchst das Konstrukt Klasse für einen Container von globalen Variablen; der erste Schritt wäre es Funktionen zu verwenden, also alles was jetzt unter "class tk" steht in einer Funktion "def main():" zu packen und später richtige Klassen zu programmieren.

Code: Alles auswählen

import tkinter as tk

def main():
    root = tk.Tk()
    liste = tk.Listbox(root)
    liste.pack()
    liste.insert(1, "maxmuster")
    root.mainloop()

if __name__ == "__main__":
    main()
Felix Eckert
User
Beiträge: 31
Registriert: Samstag 10. Juni 2017, 10:53

Sirius3 hat geschrieben:@Felix Eckert: Sterncheimporte sind böse, weil Du nicht kontrollieren kannst, was denn da in Deinen Namensraum importiert wird. Normalerweise nimmt man "import tkinter as tk" und referenziert alle Namen über "tk." also zum Beispiel tk.Tk.

Du mißbrauchst das Konstrukt Klasse für einen Container von globalen Variablen; der erste Schritt wäre es Funktionen zu verwenden, also alles was jetzt unter "class tk" steht in einer Funktion "def main():" zu packen und später richtige Klassen zu programmieren.

Code: Alles auswählen

import tkinter as tk

def main():
    root = tk.Tk()
    liste = tk.Listbox(root)
    liste.pack()
    liste.insert(1, "maxmuster")
    root.mainloop()

if __name__ == "__main__":
    main()
Vielen Dank Sirius3, es funktioniert Fehler frei :D
Antworten