Anzahl der Button-Clicks ermitteln

Fragen zu Tkinter.
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Anzahl der Button-Clicks ermitteln

Beitragvon timo_81 » Mittwoch 23. April 2008, 12:15

Moin ,
ich bin es mal wieder.
Ich hätte diesmal folgende Frage:

Ich würde gerne prüfen wie oft ein Button angeklickt wurde.
Es soll nur ein Text ausgegeben werden wenn er das erste Mal angeklickt wurde.

Überlegt habe ich mir folgendes:

1.Ich nehm ein Variable und setz die auf 0.
2. in der Routine nennen wir sie mal klick würde das ganze hochgezeilt
Also grob skizziert:

variable=0
def klick():
variable=variable+1
...


Aber leider geht das ja nicht, da er die varaible innerhalb der Methode klick nicht kennt.

Gibt es überhaupt eine Möglichkeit?
Merci schonmal
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 23. April 2008, 12:30

Das in eine Klasse packen und dann ``self.clicked = True`` im Click-Handler setzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Beitragvon timo_81 » Mittwoch 23. April 2008, 12:36

Könntest du mir das mal anhand eine kurzen Codesnippets erklären?
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Beitragvon timo_81 » Mittwoch 23. April 2008, 19:25

Hi,
ich habe nun alles gelesen was man wohl über namespaces und globale/lokale Variablen in Python im Netz vorgesetzt bekommt und ich komme auf keinen grünen Zweig.

Wenn ich es richtig verstanden habe, kann ich mit .

Code: Alles auswählen

global klick
klick=0


eine Variable als global markieren.
Wenn ich die nun in einer Funktion aufrufe zeigt mir

Code: Alles auswählen

print klick


0

Zauberhaft.
Nun bin ich so dreist und möchte die Variable in einer Funktion hochzählen.
Also mache ich folgendes:


Code: Alles auswählen


global klick
klick=0

 def funktion_count():
    klick=klick+1
    print klick




Obwohl ich es global gemacht habe (so dachte ich laut der ganzen Tutorials) kann ich nichts zuweisen und es kommt immer der Fehler

'referrenced before assignment'

Das mit der Klasse habe ich auch nicht hinbekommen..es ist zum Fliegenfischen!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 23. April 2008, 20:52

timo_81 hat geschrieben:Das mit der Klasse habe ich auch nicht hinbekommen..es ist zum Fliegenfischen!

Dann solltest du erstmal das Kapitel zu OOP im Tutorial durcharbeiten und sichergehen dass du verstehst wie es funktioniert. Ohne das kannst du GUIs so ziemlich vergessen.

Und das es ``global`` überhaupt gibt, das vergisst du am besten wieder.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 23. April 2008, 21:41

Leonidas hat geschrieben:Dann solltest du erstmal das Kapitel zu OOP im Tutorial durcharbeiten und sichergehen dass du verstehst wie es funktioniert. Ohne das kannst du GUIs so ziemlich vergessen.


Stimmt natürlich, aber ...

Leonidas hat geschrieben:Und das es ``global`` überhaupt gibt, das vergisst du am besten wieder.


... jetzt ist er schon so nah dran.

@timo_81: Setzt mal die global-Anweisung in die Funktion ...
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Beitragvon timo_81 » Donnerstag 24. April 2008, 13:11

Moin,
sorry wenn ich euch nerve.
Aber so wie ich das gelesen habe, muss ich global x in die funktion schreiben
wenn ich die Variable danach ausserhalb der Funktion benutzen möchte.

Ich möchte es aber andersum.
Ich möchte dass die vorher einen Wert bekommt und zwar 0.
Dann möchte ich diese Variable in einer Funktion weiter hochzählen.

Also entweder ich bin übelst als Kleinkind vom Wickeltisch gefallen,
oder ich habe mich vorher nur blöd ausgedrückt ;)

Gibt es noch ne Idee?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 24. April 2008, 13:17

timo_81 hat geschrieben:Aber so wie ich das gelesen habe, muss ich global x in die funktion schreiben
wenn ich die Variable danach ausserhalb der Funktion benutzen möchte.

Ja, solltest du aber nicht machen, sonst kommt da Spaghetticode raus.

timo_81 hat geschrieben:Gibt es noch ne Idee?

Klassen nutzen. Dafür sind sie ja da.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Donnerstag 24. April 2008, 13:24

timo_81 hat geschrieben:Moin,
sorry wenn ich euch nerve.
Aber so wie ich das gelesen habe, muss ich global x in die funktion schreiben
wenn ich die Variable danach ausserhalb der Funktion benutzen möchte.

Ich möchte es aber andersum.
Ich möchte dass die vorher einen Wert bekommt und zwar 0.
Dann möchte ich diese Variable in einer Funktion weiter hochzählen.

Also entweder ich bin übelst als Kleinkind vom Wickeltisch gefallen,
oder ich habe mich vorher nur blöd ausgedrückt ;)

Gibt es noch ne Idee?


Du hast dich schon klar ausgedrückt und ich denke, wir haben von Anfang an verstanden, was du willst.

Nur: Es ist alles gesagt.

Ich habe dir global-Lösung beschrieben - warum du es so nicht machst, weiß ich nicht.
Ausprobiert hast du es anscheinend ja nicht, sonst hättest du dich nicht wie oben zitiert dazu geäußert.

Die andere - langfristig bessere - Idee hat Leonidas ebenfalls schon zweimal benannt.

Jetzt bist du dran.
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Beitragvon timo_81 » Donnerstag 24. April 2008, 15:08

Jetz ist der Groschen gefallen ;)
Ohje!!
Merci *sich selber schlag*

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder