Seite 1 von 1

Problem mit Variable "var"

Verfasst: Samstag 25. März 2017, 13:51
von jbaben
Hallo,
ich habe ein Problemmit der Variablen "var" in de Funktion: sel ( + str(var.get()), Fehlermeldung:
File "J:\MeineProgramme\Python\Windows\Beispiele aus dem Internet\sz_01.py", line 75, in sel
selection = "You selected the option " + str(var.get())
NameError: name 'var' is not defined
Wie muss ich die Variable in der Funktion: sel richtig deklarieren.
Hat nicht funktioniert: + str(self.var.get())
Hier mein Python Programm: (python3 sz.py)

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Datum: 22.03.2017
# Vorlage:
# gui_python_04.py

try:
    #python3
    from tkinter import *
    from time import *
except ImportError:
    #python2
    from Tkinter import *
    from time import *

class MyApp(Tk):
    def __init__(self):
        Tk.__init__(self)
        Alarmzone_A = IntVar()
        Alarmzone_B = IntVar()
        Alarmzone_C = IntVar()
        Alarmzone_D = IntVar()
        var = IntVar()
        fr = Frame(self)
        fr.pack()
        self.canvas  = Canvas(fr, height = 400, width = 600)
        self.canvas.pack()
        #self.name.set("Steuerzentrale")
        #self.rect = self.canvas.create_rectangle(25, 25, 75, 75, fill = "white")
        #self.do_blink = False
        service_button = Button(self, text="Service", command=self.start_blinking)
        service_button.place(x=200, y=360)
        beenden_button = Button(self, text="Beenden", command=self.close_fenster)
        beenden_button.place(x=25, y=360)
        text_label1 = Label(self,text="Alarmzone")
        text_label1.place(x=25, y=30)
        # RadioButton
        R1 = Radiobutton(self, text="A", variable=var, value=1, command=self.sel)
        R1.pack( anchor = W )
        R2 = Radiobutton(self, text="B", variable=var, value=2, command=self.sel)
        R2.pack( anchor = W )
        # Label fuer Test RadioButton
        label3 = Label(self, text =str(var.get()))
        label3.place(x=100, y=30)
        #label3.pack()
        # ListBox
        Lb1 = Listbox(self, width = 50)
        Lb1.insert(1, "Python")
        Lb1.insert(2, "Perl")
        Lb1.insert(3, "C")
        Lb1.insert(4, "PHP")
        Lb1.insert(5, "JSP")
        Lb1.insert(6, "Ruby")
        Lb1.place(x=25, y=100)

    def start_blinking(self):
        self.do_blink = True
        self.blink()

    def stop_blinking(self):
        self.do_blink = False

    def blink(self):
        if self.do_blink:
            current_color = self.canvas.itemcget(self.rect, "fill")
            new_color = "red" if current_color == "white" else "white"
            self.canvas.itemconfigure(self.rect, fill=new_color)
            text_label2 = Label(master=self,text="blink")
            text_label2.pack()
            self.after(1000, self.blink)

    def sel(self):
        selection = "You selected the option " + str(var.get())
        text_label3 = Label(self, text = selection)
        text_label3.pack()

    def close_fenster(self): 
        self.quit()
        self.destroy()

if __name__ == "__main__":
    root = MyApp()
    root.mainloop() 
MfG

Juergen B.
:(

Re: Problem mit Variable "var"

Verfasst: Samstag 25. März 2017, 13:56
von snafu
Du hast das self vergessen. Definiere den Wert als self.var und greife mit self.var darauf zu.

Re: Problem mit Variable "var"

Verfasst: Samstag 25. März 2017, 14:18
von jbaben
Hallo,

vielen Dank für die schnelle Antwort.
Es funktioniert mit dem gegebenen Hinweis
Hier mein angepasster Code:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Datum: 22.03.2017
# Vorlage:
# gui_python_04.py

try:
    #python3
    from tkinter import *
    from time import *
except ImportError:
    #python2
    from Tkinter import *
    from time import *

class MyApp(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.Alarmzone_A = IntVar()
        self.Alarmzone_B = IntVar()
        self.Alarmzone_C = IntVar()
        self.Alarmzone_D = IntVar()
        self.var = IntVar()
        fr = Frame(self)
        fr.pack()
        self.canvas  = Canvas(fr, height = 400, width = 600)
        self.canvas.pack()
        #self.name.set("Steuerzentrale")
        #self.rect = self.canvas.create_rectangle(25, 25, 75, 75, fill = "white")
        #self.do_blink = False
        service_button = Button(self, text="Service", command=self.start_blinking)
        service_button.place(x=200, y=360)
        beenden_button = Button(self, text="Beenden", command=self.close_fenster)
        beenden_button.place(x=25, y=360)
        text_label1 = Label(self,text="Alarmzone")
        text_label1.place(x=25, y=30)
        # RadioButton
        R1 = Radiobutton(self, text="A", variable=self.var, value=1, command=self.sel)
        R1.pack( anchor = W )
        R2 = Radiobutton(self, text="B", variable=self.var, value=2, command=self.sel)
        R2.pack( anchor = W )
        # Label fuer Test RadioButton
        label3 = Label(self, text =str(self.var.get()))
        label3.place(x=100, y=30)
        #label3.pack()
        # ListBox
        Lb1 = Listbox(self, width = 50)
        Lb1.insert(1, "Python")
        Lb1.insert(2, "Perl")
        Lb1.insert(3, "C")
        Lb1.insert(4, "PHP")
        Lb1.insert(5, "JSP")
        Lb1.insert(6, "Ruby")
        Lb1.place(x=25, y=100)

    def start_blinking(self):
        self.do_blink = True
        self.blink()

    def stop_blinking(self):
        self.do_blink = False

    def blink(self):
        if self.do_blink:
            current_color = self.canvas.itemcget(self.rect, "fill")
            new_color = "red" if current_color == "white" else "white"
            self.canvas.itemconfigure(self.rect, fill=new_color)
            text_label2 = Label(master=self,text="blink")
            text_label2.pack()
            self.after(1000, self.blink)

    def sel(self):
        selection = "You selected the option " + str(self.var.get())
        text_label3 = Label(self, text = selection)
        text_label3.pack()

    def close_fenster(self): 
        self.quit()
        self.destroy()

if __name__ == "__main__":
    root = MyApp()
    root.mainloop() 
So nun kann ich mit meinem Programm weiter machen, bis zum nächsten Problem.

MfG

Juergen B.
:D

Re: Problem mit Variable "var"

Verfasst: Samstag 25. März 2017, 19:41
von Sirius3
@jbaben: die Probleme sind schon da, auch wenn sie nicht sofort auffallen. Deine Importe sind falsch. Nicht nur, dass *-Importe schlecht sind, weil sie unkontrolliert Namen in den eigenen Namensraum schaufeln, der try-Block umfaßt zu viel. Sollte der tkinter-Import glücken, der time-Import aber fehlschlagen landet man im except-Block, wo dann der Tkinter-Import fehlschlägt und man nie auf den eigentlichen Fehler kommt. TkInter wird üblicherweise als »import tkinter as tk« benutzt. Das was aus time importiert wird, wird gar nicht benutzt.
Wenn man anfängt, Attribute durchzunummerieren, bzw. durchzualphabetisieren, will man eigentlich eine Liste verwenden. Du willst sicher nicht jede Sekunde ein neues Label erzeugen. Alle Elemente werden üblicherweise in __init__ erzeugt und in den anderen Methoden nur noch angepaßt.