Seite 1 von 1

Variable in einem Ausgabe

Verfasst: Samstag 12. Juni 2021, 10:53
von der-nordmann
Hallo zusammen,

ich möchte ein paar Werte berechnen und in einem Ergebnisfenster anzeigen. Ich habe das Beispiel mal stark verkürzt.

Ich verstehe aber offensichtlich nicht richtig, wie ich die Variablen an die Klasse des Ausgabefensters übergebe. Ich hatte in meinem jugendlichen Leichtsinn angenommen, dass ich das mit der set()-Methode hinbekomme...

Freue mich über jeden Hinweis.

Danke.

Viele Grüße, Christian

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter

# Ausgabebildschirm definieren
class ResultScreenGUI(tkinter.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        #
        # Leistung des Solar-Wechselrichters anzeigen
        #
        tkinter.Label(self,text = "Leistung Solaranlage:", width=20, anchor='w').grid(row=0, column=0, padx='3', pady='3', sticky='w')
        # Variable für die Solarleistung defnieren
        self.solarpowerGUI = tkinter.IntVar()
        tkinter.Label(self, text = str(self.solarpowerGUI.get()), width=20, anchor='w').grid(row=0, column=1, padx='3', pady='3', sticky='e')

        # Button zum Beenden des Fensters anlegen
        tkinter.Button(self, text = "Beenden...", command = self.quit).grid (row = 3, column = 0, padx='3', pady='3', sticky='we')

##
# Hauptprogramm
##

def main():

    # Hauptfenster definieren und öffnen
    MainScreen = tkinter.Tk()
    MainScreen.title("Leistung Solaranlage anzeigen")
    MainScreen.geometry("640x480+100+100")

    # Ausgabefenster definieren
    ResultScreen = ResultScreenGUI(MainScreen)

    # Wert definieren/auslesen/berechnen... hier nur ein Dummy-Wert...
    solarpower = 3529

    # Wert in die Variable des ResultScreens schreiben
    ResultScreen.solarpowerGUI.set(int(solarpower))

    # mainloop des ResultScreens starten
    ResultScreen.mainloop()

    ##
    #Fester am Ende schließen
    ##
    ResultScreen.destroy()
    MainScreen.destroy()

if __name__ == '__main__':
    main()


Re: Variable in einem Ausgabe

Verfasst: Samstag 12. Juni 2021, 11:26
von __deets__
Wenn du eine variable nutzen willst, dann musst du die auch mit dem Argument textvariable an das Label übergeben. Nicht mit text, das nur einmal ausgewertet wird.

Re: Variable in einem Ausgabe

Verfasst: Samstag 12. Juni 2021, 11:52
von der-nordmann
Entscheidender Hinweis!! Vielen Dank.

Viele Grüße, Christian

Re: Variable in einem Ausgabe

Verfasst: Samstag 12. Juni 2021, 12:45
von Sirius3
Variablennamen schreibt man klein. Ein Widget plaziert sich nicht selbst, das pack gehört nicht in __init__. Das `createWidgets` ist eigentlich überflüssig, weil das alles auch in __init__ stehen könnte.
Was für eine GUI ist eigentlich `solarpowerGUI`?
`solarpower` ist bereits ein `int`.
mainloop ruft man üblicherweise über main_screen auf.

Code: Alles auswählen

import tkinter

# Ausgabebildschirm definieren
class ResultScreenGUI(tkinter.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        # Variable für die Solarleistung defnieren
        self.solarpower = tkinter.IntVar()
        tkinter.Label(self,text="Leistung Solaranlage:", width=20, anchor='w').grid(row=0, column=0, padx='3', pady='3', sticky='w')
        tkinter.Label(self, textvariable=self.solarpower, width=20, anchor='w').grid(row=0, column=1, padx='3', pady='3', sticky='e')
        tkinter.Button(self, text="Beenden...", command=self.quit).grid(row=3, column=0, padx='3', pady='3', sticky='we')

def main():
    # Hauptfenster definieren und öffnen
    main_screen = tkinter.Tk()
    main_screen.title("Leistung Solaranlage anzeigen")
    main_screen.geometry("640x480+100+100")

    # Ausgabefenster definieren
    result_screen = ResultScreenGUI(main_screen)
    result_screen.pack()

    # Wert definieren/auslesen/berechnen... hier nur ein Dummy-Wert...
    solarpower = 3529

    result_screen.solarpower.set(solarpower)
    # mainloop des ResultScreens starten
    main_screen.mainloop()

if __name__ == '__main__':
    main()

Re: Variable in einem Ausgabe

Verfasst: Samstag 12. Juni 2021, 14:13
von der-nordmann
Oh. Danke für die vielen Hinweise.

'solarpowerGUI' ist keine GUI. Ich wollte damit eine Variabel einführen, die der 'solarpaower' entspricht, aber eben in der GUI verwendet wird.

Das mit dem 'createWidgets' hatte ich mir auch schon gedacht, war aber unsicher. Ich hatte das Beispiel aus verschiedenen Quellen zusammengebastelt, da es meine allerersten Gehversuche in Tkinter sind...

Viele Grüße, Christian