text ist nicht so wie er sein soll

Fragen zu Tkinter.
Antworten
jannikjunior
User
Beiträge: 8
Registriert: Samstag 14. März 2020, 20:53

Hi,
Ich habe in in die Labels 2-8 text eingegeben, der mir aber nicht so angezeigt wird. In den Labels stehen schon die Zahlen, die aber erste nach drücken des buttons da sein sollten.

Code: Alles auswählen

import random

from tkinter import *

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

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

superzahlen_alle = []
superzahlen_alle.extend(range(10))

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

superzahl = random.sample(superzahlen_alle, 1)

label0 = Label(fenster, text = "Deine Zahlen:", background="white")

label1 = Label(fenster, text = "Lottozahlen:", background="white")

label2 = Label(fenster, text = ..., width=2, background="white")

label3 = Label(fenster, text = ..., width=2, background="white")

label4 = Label(fenster, text = ..., width=2, background="white")

label5 = Label(fenster, text = ..., width=2, background="white")

label6 = Label(fenster, text = ..., width=2, background="white")

label7 = Label(fenster, text = ..., width=2, background="white")

label8 = Label(fenster, text = ..., width=2, background="yellow")

def button_action(label1):
    lottozahlen_richtig = random.sample(lottozahlen_alle, 6)
    lottozahlen_richtig.sort()
    superzahl = random.sample(superzahlen_alle, 1)
    label2.configure(text = lottozahlen_richtig[0])
    label3.configure(text = lottozahlen_richtig[1])
    label4.configure(text = lottozahlen_richtig[2])
    label5.configure(text = lottozahlen_richtig[3])
    label6.configure(text = lottozahlen_richtig[4])
    label7.configure(text = lottozahlen_richtig[5])
    label8.configure(text = superzahl)

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

button1.configure(command=lambda: button_action(label1))

label0.place(x=10, y=2)
label1.place(x=10, y=22)
label2.place(x=80, y=22)
label3.place(x=100, y=22)
label4.place(x=120, y=22)
label5.place(x=140, y=22)
label6.place(x=160, y=22)
label7.place(x=180, y=22)
label8.place(x=200, y=22)
button1.place(x=10, y=62)
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum gibst Du zwei mal `command` bei Deinem Button an, und das erstemal auch nur den Rückgabewert des Funktionsaufrufs?

Das statische Label1 zu übergeben ist quatsch, da Du ja eigentlich die Labels 2 bis 8 brauchst.
Aber statt Variablen durchzunummerieren, solltest Du eine Liste benutzen.

Eine leere Liste mit extend zu erweitern ist umständlich, wenn man auch direkt eine Liste erzeugen könnte, oder einfach mit dem `range`-Objekt arbeiten könnte.
`lottozahlen_richtig` und `superzahl` auf Modulebene wird nicht benutzt.

Code: Alles auswählen

import random
import tkinter as tk
from functools import partial

ALLE_LOTTOZAHLEN = range(1, 50)
ALLE_SUPERZAHLEN = range(10)

def button_action(zahlen_labels):
    lottozahlen_richtig = sorted(random.sample(ALLE_LOTTOZAHLEN, 6))
    superzahl = random.choice(ALLE_SUPERZAHLEN)
    for label, zahl in zip(zahlen_labels, lottozahlen_richtig):
        label['text'] = zahl
    zahlen_labels[-1]['text'] = superzahl

def main():
    fenster = tk.Tk()
    fenster.title("Lotto")
    tk.Label(fenster, text = "Deine Zahlen:", background="white").pack()
    tk.Label(fenster, text = "Lottozahlen:", background="white").pack()
    zahlen_labels = []
    for _ in range(7):
        label = tk.Label(fenster, width=2, background="white")
        label.pack()
        zahlen_labels.append(label)
    zahlen_labels[-1]['background'] = "yellow"
    button_wuerfeln = tk.Button(fenster, text = "neue Zahlen", command=partial(button_action, zahlen_labels))
    button_wuerfeln.pack()
    fenster.mainloop()

if __name__ == '__main__':
    main()
jannikjunior
User
Beiträge: 8
Registriert: Samstag 14. März 2020, 20:53

Danke, dass mit dem command im Button hat geholfen. Ich hab gerade erst angefangen, verstehe deinen Code nicht so 100%. Ich hab zwar ne Ahnung was du gemacht hast, aber würde erstmal gerne bei meinem Chaos bleiben. Hat mein Code außer der Übersicht irgend was schlimmes? Hab das jetzt so:

Code: Alles auswählen

Liste = [label2, label3, label4, label5, label6, label7, label8]

def button_action(Liste):
    lottozahlen_richtig = random.sample(lottozahlen_alle, 6)
    lottozahlen_richtig.sort()
    superzahl = random.sample(superzahlen_alle, 1)
    label2.configure(text = lottozahlen_richtig[0])
    label3.configure(text = lottozahlen_richtig[1])
    label4.configure(text = lottozahlen_richtig[2])
    label5.configure(text = lottozahlen_richtig[3])
    label6.configure(text = lottozahlen_richtig[4])
    label7.configure(text = lottozahlen_richtig[5])
    label8.configure(text = superzahl)

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

button1.configure()
Benutzeravatar
__blackjack__
User
Beiträge: 14092
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jannikjunior: Die durchnummerierten Namen und die globalen Variablen sind Schlimm. Und der Name `Liste`. Und grundsätzlich ist unübersichtlicher Code schlimm.
“It is easier to change the specification to fit the program than vice versa.” — Alan J. Perlis
Antworten