zerbreche mir den kopf an sehr einfachem probelm :)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Seff
User
Beiträge: 5
Registriert: Sonntag 21. August 2011, 19:50

Hi, ich hänge grad an einem ganz eifachen problem fest..

Code: Alles auswählen

variable1 = IntVar()
variable1.set(5)
ich bekomme dann folgenden fehler: NameError: name 'IntVar' is not defined

Aber eigentlich ist doch IntVar eine standart funktion die nicht definiert werden muss?
Ich bin grad etwas verwirrt..
Seff
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Ich kenne die Funktion IntVar zwar nicht, aber soweit ich das sehe kanst du das gleiche mit

Code: Alles auswählen

variable1=5
bewirken, dabei wird die Variable ja auch ein Integer wert zugewiesen
BlackJack

@Seff: `IntVar` ist keine Standardfunktion in dem Sinne, dass sie zu den „eingebauten” Funktionen gehört, die man einfach so verwenden kann. Ich nehme mal an Du meinst `IntVar` aus dem `Tkinter`-Modul.
Seff
User
Beiträge: 5
Registriert: Sonntag 21. August 2011, 19:50

Ich denke schon das es mit tkinter zu tun hat. ich hab es aus einem Buch in dem das fast so ähnlich gemacht ist, da scheint das aber zu funktionieren.
wenn ich aber den code so schreibe

Code: Alles auswählen

from tkinter import *
variable1 = IntVar()
variable1.set(5)
klappt es immer noch nicht. allerdings ist die fehlermeldung dann: AttributeError: 'NoneType' object has no attribute 'tk'
Seff
User
Beiträge: 5
Registriert: Sonntag 21. August 2011, 19:50

so, jetzt hab ichs, man muss das fenster von tkinter vorher schon initialisieren.

Code: Alles auswählen

from tkinter import *
fenster=Tk()
variable1 = IntVar()
variable1.set(5)
print(variable1)
fenster.mainloop()
Danke für die denkanstöße :) Seff
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und am besten gewöhnst du dir bei der Gelegenheit gleich noch die *-Importe ab. Statt `from tkinter import *` benutzer besser `import tkinter as tk` und greife dann auf die Elemente aus dem Modul über `tk.Tk`, `tk.IntVar`, etc. zu. Dann müllst du dir nicht den ganzen Namensraum voll und weißt noch woher deine Objekte kommen.

Sebastian
Das Leben ist wie ein Tennisball.
Seff
User
Beiträge: 5
Registriert: Sonntag 21. August 2011, 19:50

So, bin jetzt auf ein neues Problem gestoßen, hat nichts mit dem oberen zu tun, aber ich will nicht wieder ein neuen Thread auf machen.
Also, hier hab ich ein Codeschnipsel der einfach nicht klappen will:

Code: Alles auswählen

from tkinter import *

main = Tk()
main.geometry("200x200")

variable = 5


def neufenster():
    nebenfenster = Tk()
    nebenfenster.geometry("200x200")
    global variable
    zähler = IntVar()
    zähler.set(variable)
    label1 = Label(neufenster, textvariable = zähler).pack()
    nebenfenster.mainloop()

button1 = Button(main, text = "Klicken", command = neufenster).pack()
main.mainloop()
main.mainloop()
Der Code soll folgendes machen. Ein fenster mit einem Button, der ein neues fenster öffnet, mit einem label drinn, welches sich selbst aktualisieren kann. (Deswegen IntVar).
Nur zeigt es einach nichts an. und es erscheint eine Fehlermeldung: AttributeError: 'function' object has no attribute 'tk'

Ich hab auch schon probiert die IntVar Variable "zähler" woanders zu erstellen, hab eigentlich alle schon mal ausprobiert, aber das gibt immer fehler... Jemand eine Idee wie ich das hinbekomme, geh ich am ende sogar einen ganz falschen Weg?
BlackJack

@Seff: Der direkte Fehler ist das Du bei der Erzeugung des `Label` als erstes Argument ein falsches Objekt übergibst. Nämlich die Funktion in der das ganze passiert.

Davon abgesehen darf man nur ein `Tk`-Objekt erstellen. Das ist das Hauptfenster und davon darf es nur eines geben. Weitere Fenster kann man mit `Toplevel` erstellen. Und man muss auch nur einmal `mainloop()` aufrufen.

Desweiteren solltest Du ``global`` sofort wieder vergessen. Hier wird es noch nicht einmal benötigt.
Seff
User
Beiträge: 5
Registriert: Sonntag 21. August 2011, 19:50

ok, das mit dem falschen Argument im label war natürlich nur ein Schusselfehler, weil die Namen von Funktion und Fenster so ähnlich waren...

Und der Rest: Es klappt!! Danke, du hast mir den abend gerettet.
Antworten