Seite 1 von 1
List.insert probleme (Python3.6)
Verfasst: Montag 11. September 2017, 16:41
von Felix Eckert
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...
Re: List.insert probleme (Python3.6)
Verfasst: Montag 11. September 2017, 16:54
von kbr
Der Fehler ist, dass Du auf das Listbox-Objekt sofort die Methode pack aufrufst. Diese gibt aber None zurück.
Re: List.insert probleme (Python3.6)
Verfasst: Montag 11. September 2017, 18:51
von Sirius3
@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()
Re: List.insert probleme (Python3.6)
Verfasst: Samstag 14. Oktober 2017, 10:55
von Felix Eckert
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
