Seite 1 von 1

Mit Button Aktion wiederholen lassen

Verfasst: Samstag 14. März 2020, 21:01
von jannikjunior
Hi,
Ich habe gerade erst angefangen Python zu lernen und habe einen Lotto Simulator programmiert. Ich möchte gerne, dass wenn ich einen Button drücke, dass er neue Lottozahlen auslost.

Geht das irgendwie?

Schon mal danke für die Antworten.

LG

Re: Mit Button Aktion wiederholen lassen

Verfasst: Samstag 14. März 2020, 22:21
von sparrow
Klar geht das.
Womit hast du denn Schwierigkeiten?

Re: Mit Button Aktion wiederholen lassen

Verfasst: Samstag 14. März 2020, 23:06
von Sirius3
Was hast Du schon probiert? Zeige Deinen Code und wo Du nicht weiter kommst.

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 10:32
von jannikjunior

Code: Alles auswählen

import random
from tkinter import *

def button_action():
    ????? 
   
fenster = Tk()
fenster.title("Lotto")

lottozahlen_alle = []
lottozahlen_alle.extend(range(1,50))

lottozahlen_richtig = random.sample(lottozahlen_alle, 6)
lottozahlen_richtig.sort()

button1 = Button(fenster, text = "neue Zahlen", command=button_action)

label1 = Label(fenster, text = lottozahlen_richtig) 

label1.pack()
button1.pack()
Ich weiß nicht wie ich die button_action definieren soll um die lottozahlen_richtig neu zu losen

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 10:48
von __deets__
Du musst zwei Sachen machen:

- die gesamte Berechnung der 6 aus 49 gehört IN die button action.
- die button action muss das Label kennen, damit sie dessen Text mit der configure-Methode neu setzen kann. Das kann man zb mit einem lambda oder der Verwendung von functools.partial erreichen.

Code: Alles auswählen

def action(label):
    ...

label = ...
button.configure(command=lambda: action(label))

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:11
von jannikjunior
Kann sein, dass ich blöd bin, aber ich checks nicht ganz

Code: Alles auswählen

import random
from tkinter import *

fenster = Tk()
fenster.title("Lotto")

lottozahlen_alle = []
lottozahlen_alle.extend(range(1,50))

lottozahlen_richtig = random.sample(lottozahlen_alle, 6)
lottozahlen_richtig.sort()

label1 = Label(fenster, text = lottozahlen_richtig)

def button_action(label1):
    lottozahlen_richtig = random.sample(lottozahlen_alle, 6)
    lottozahlen_richtig.sort()

button1 = Button(fenster, text = "neue Zahlen", command=button_action(label1))
button1.configure(command=lambda: button_action(label1))


label1.pack()
button1.pack()

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:21
von __deets__
Da fehlt noch das setzen der errechnet werdet mit label1.configure.

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:25
von jannikjunior
In der Button Action?
Und was muss ins configure rein?

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:28
von sparrow
Das, was _in_ der Funktion steht, wird ausgeführt, wenn der Button gedrückt wird.
Also musst du darin auch den Code schreiben, der den Text auf dem Label ändert, sonst nützt das erzeugen der neuen Zahlen ja nichts, weil sie nirgends angezeigt werden.
Deshalb hat __deets__ dir gezeigt, wie du die Instanz des Labels an die Funktion übergibst.

Nun musst du in der Funktion den Text des Labels ändern.

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:29
von __deets__
Natuerlich in der Button-action, das ist doch der Moment, in dem du neue Ergebnisse hast. Und der configure-Aufruf ist gut beschrieben in der Dokumentaton. Damit kannst du Eigenschaften einens Widgets nachtraeglich aendern, unter anderem *trommelwirbel* den Text.

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:37
von jannikjunior
Also label1.configure(fenster, text = lottozahlen_richtig)

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:40
von __deets__
Jein. Warum denkst du kommt da fenster zu Beginn? Das ist das umliegende Widget, und wird nur gebraucht, wenn man das Label *anlegt*.

Re: Mit Button Aktion wiederholen lassen

Verfasst: Sonntag 15. März 2020, 11:44
von jannikjunior
Danke Danke klappt endlich