Variable auslagern

Fragen zu Tkinter.
Antworten
jbaben
User
Beiträge: 24
Registriert: Dienstag 12. Januar 2016, 16:05

Hallo,

ich würde gerne die vielen Variablen in meiner Anwendung in eine seperate Datei (variable_sz.py) auslagern und diese in meiner Anwendung mit:
"import variable_sz" oder "from variable_sz import *" verwenden.
ohne auslagern:

Code: Alles auswählen

class MyApp(Tk): 
   def __init__(self):
        Tk.__init__(self)
        fr = Frame(self)
        fr.pack(side='bottom', fill='x')
        self.geometry("800x400")
        self.title('Steuerzentrale')
	# Alarmtexte
        self.AlarmText = StringVar()
        self.AlarmText = ["Tür Küche offen", "Tür Eingang offen", "Bewegung Eingangsbereich", "Beweung Küche", \
                          "Bewegung Gäste WC", "Bewegung Flur", "Bewegung Arbeitszimmer", "Bewegung Schlafzimmer", \
                          "Außentür Wohnzimmer", "Bewegung Wohnzimmer", "Bewegung Gästezimmer", "Panik-Taste Wohnzimmer", \
                          "Panik-Taste Küche", "Fehler Bewegungsmelder", "Feueralarm", "Medical", "Panik"  ]
        self.Text = StringVar()
        self.Text = [ "Tür Küche", "Tür Eingang", "Eingangsbereich", "Küche", "Gäste WC", "Korridor", "Arbeitszimmer", \
                            "Schlafzimmer", "Außentür Wohnzimmer", "Wohnzimmer", "Gästezimmer" ]

        # Variable
        self.Benutzer = StringVar()
        self.Kennwort = StringVar()
        self.Benutzer.set("Juergen")
        self.Alarmzone_A = IntVar()
        self.Alarmzone_B = IntVar()
        self.Alarmzone_C = IntVar()
        self.Alarmzone_D = IntVar()
        usw.
        #Verwendung
        # Label Alarmzone
        Label_Text1 = Label(self.FensterAlarmzone, text= self.Text[0], font = 10, anchor = W, width = 25)
        Label_Text1.place(x=10, y=60)
variable_sz.py (Beispiel habe ich aus dem Internet)

Code: Alles auswählen

# variable_sz.py
# Datum: 31.03.2017
# Variablen für sz.py
try:
    #python3
    from tkinter import *
except ImportError:
    #python2
    from Tkinter import *
  
class A:
   def set_var(self):
        # Alarmtexte
        self.AlarmText = StringVar()
        self.AlarmText = ["Tür Küche offen", "Tür Eingang offen", "Bewegung Eingangsbereich", "Beweung Küche", \
                          "Bewegung Gäste WC", "Bewegung Flur", "Bewegung Arbeitszimmer", "Bewegung Schlafzimmer", \
                          "Außentür Wohnzimmer", "Bewegung Wohnzimmer", "Bewegung Gästezimmer", "Panik-Taste Wohnzimmer", \
                          "Panik-Taste Küche", "Fehler Bewegungsmelder", "Feueralarm", "Medical", "Panik"  ]
        self.Text = StringVar()
        self.Text = [ "Tür Küche", "Tür Eingang", "Eingangsbereich", "Küche", "Gäste WC", "Korridor", "Arbeitszimmer", \
                            "Schlafzimmer", "Außentür Wohnzimmer", "Wohnzimmer", "Gästezimmer" ]

damit bekomme ich eine Fehlermeldung: Text nicht definiert
Wie müsste die ausgelagerte Datei aussehen, oder ist das nicht sinnvoll ?

MfG

Juergen B.
:?:
Zuletzt geändert von Anonymous am Freitag 31. März 2017, 21:27, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@jbaben: ich glaube, Du meinst nicht Variablen, sondern Konstanten. Bei Konstanten ist es generell möglich, sie in einer eigenen Datei zu speichern, aber normalerweise definiert man sie einfach am Anfang der Datei, da stören sie auch nicht weiter. Die Attribute würden dann ganz wegfallen. So ganz verstehe ich die Listen sowieso nicht. Irgendwo brauchst Du auch noch die Zuordnung, was denn der 7. Eintrag in der Liste bedeutet? Wie hast Du Dir das vorgestellt? Die Zuweisung von StringVar() direkt vor der Liste ist quatsch, weil Du ja AlarmText gleich wieder überschreibst. *-Importe sind böse.

Code: Alles auswählen

import tkinter as tk

ALARM_TEXTS = [
    "Tür Küche offen", "Tür Eingang offen", "Bewegung Eingangsbereich",
    "Beweung Küche", "Bewegung Gäste WC", "Bewegung Flur",
    "Bewegung Arbeitszimmer", "Bewegung Schlafzimmer", 
    "Außentür Wohnzimmer", "Bewegung Wohnzimmer", "Bewegung Gästezimmer",
    "Panik-Taste Wohnzimmer", "Panik-Taste Küche", "Fehler Bewegungsmelder",
    "Feueralarm", "Medical", "Panik"    
]
ROOM_TEXTS = [
    "Tür Küche", "Tür Eingang", "Eingangsbereich", "Küche", "Gäste WC",
    "Korridor", "Arbeitszimmer", "Schlafzimmer", "Außentür Wohnzimmer",
    "Wohnzimmer", "Gästezimmer"
]

class MyApp(tk.Tk):
   def __init__(self):
        tk.Tk.__init__(self)
        frame = tk.Frame(self)
        frame.pack(side='bottom', fill='x')
        self.geometry("800x400")
        self.title('Steuerzentrale')

        self.username = tk.StringVar(self, "Juergen")
        self.password = tk.StringVar(self)
        self.alarmzones = {}
        for room in ROOM_TEXTS:
            alarmzone = tk.IntVar(self)
            label = tk.Label(self, text=room)
            label.pack()
            self.alarmzones[room] = alarmzone
jbaben
User
Beiträge: 24
Registriert: Dienstag 12. Januar 2016, 16:05

Hallo,

vielen Dank für Deine gute Antwort.
Da kann ich was mit anfangen und werde es verwenden.

MfG

Juergen B.
Antworten