Zähler mit Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Challanger
User
Beiträge: 14
Registriert: Dienstag 26. Januar 2016, 16:49

Hallo

Ich bin neu hier und erlerne Python
Ich habe mir auf You Tube einige Tutorials angeschaut, dabei habe ich mir folgendes Programm rausgeschrieben

was ich nicht verstehe ist das der Zähler nicht Funktioieren soll

Da immer erklärt wird das man so leicht rechnen kann mit den Variablen

jedenfalls ist es so weit das ich nichtmal mehr weiß wonach ich suchen soll

Das Problem ist das unter Butten 1 oder Plus die Variable b um eins weitergezählt werden soll

Code: Alles auswählen

from tkinter import *
b=10

fenster = Tk()
fenster.title("Zieleinrichtung")
fenster.geometry("300x300")
zeichner = Canvas(fenster)
zeichner.pack()
zeichner.create_line(0,150,300,150)
zeichner.create_line(150,0,150,300)

def ausgabeplus():
    print(b)
    b=b+1                 # was ist falsch an diesem zähler ?
    
    
def ausgabeminus():
    print(b)
    

knopf1 = Button(fenster, text="Plus",command=ausgabeplus)
knopf2 = Button(fenster, text="Minus",command=ausgabeminus)
knopf1.place(x = 20, y = 50 , width=50, height=25)
knopf2.place(x = 70, y = 50 , width=50, height=25)


mainloop()
Zuletzt geändert von Anonymous am Dienstag 26. Januar 2016, 17:49, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Challanger: das Problem ist, dass in ausgabeplus, b eine lokale Variable ist, die beim print-Aufruf noch nicht definiert ist. Um also sich einen Wert über einen Funktionsaufruf hinaus merken zu können, braucht man eigentlich Objektorientierte Programmierung:

Code: Alles auswählen

import tkinter as tk

class Fenster(tk.Tk):
    def __init__(self):
        super().__init__()
        self.b = 10
        self.title("Zieleinrichtung")
        self.geometry("300x300")
        zeichner = tk.Canvas(self)
        zeichner.pack()
        zeichner.create_line(0,150,300,150)
        zeichner.create_line(150,0,150,300)
        knopf1 = tk.Button(self, text="Plus", command=self.ausgabeplus)
        knopf2 = tk.Button(self, text="Minus", command=self.ausgabeminus)
        knopf1.place(x = 20, y = 50 , width=50, height=25)
        knopf2.place(x = 70, y = 50 , width=50, height=25)

    def ausgabeplus(self):
        print(self.b)
        self.b = self.b + 1

    def ausgabeminus(self):
        print(self.b)

def main():
    fenster = Fenster()
    fenster.mainloop()
    
if __name__ == '__main__':
    main()
Challanger
User
Beiträge: 14
Registriert: Dienstag 26. Januar 2016, 16:49

allerbesten dank

hatte mir vorhin schon alles angeguckt mit dem Class
Ich werde da nochmal Nachhaken


aber besten Dank nochmal
Antworten