Seite 1 von 1

text ist nicht so wie er sein soll

Verfasst: Montag 16. März 2020, 19:02
von jannikjunior
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)

Re: text ist nicht so wie er sein soll

Verfasst: Montag 16. März 2020, 19:16
von Sirius3
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()

Re: text ist nicht so wie er sein soll

Verfasst: Montag 16. März 2020, 20:02
von jannikjunior
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()

Re: text ist nicht so wie er sein soll

Verfasst: Montag 16. März 2020, 23:12
von __blackjack__
@jannikjunior: Die durchnummerierten Namen und die globalen Variablen sind Schlimm. Und der Name `Liste`. Und grundsätzlich ist unübersichtlicher Code schlimm.