Variable in einem Ausgabe

Fragen zu Tkinter.
Antworten
der-nordmann
User
Beiträge: 3
Registriert: Samstag 12. Juni 2021, 10:42

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()

__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
der-nordmann
User
Beiträge: 3
Registriert: Samstag 12. Juni 2021, 10:42

Entscheidender Hinweis!! Vielen Dank.

Viele Grüße, Christian
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
der-nordmann
User
Beiträge: 3
Registriert: Samstag 12. Juni 2021, 10:42

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
Antworten