Seite 1 von 1

Variable auslagern

Verfasst: Freitag 31. März 2017, 16:05
von jbaben
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.
:?:

Re: Variable auslagern

Verfasst: Samstag 1. April 2017, 17:09
von Sirius3
@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

Re: Variable auslagern

Verfasst: Mittwoch 12. April 2017, 17:14
von jbaben
Hallo,

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

MfG

Juergen B.