Eingabefeld nichts übergeben

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
Xalooz
User
Beiträge: 19
Registriert: Samstag 17. April 2021, 07:28

Hallo,

im Moment ist es bei mir so, wenn ich meine GUI öffne, gibt es 3 Eingabefelder plus Start Button. Ich muss in alle Felder meinen Wert eintragen, damit es startet. Ich möchte allerdings auch mal Werte in nur 1 oder 2 Eingabefelder eingeben und den 3 leer lassen. Kann man irgendwie auch keinen Wert übergeben (einfach ignorieren, also auch kein 0 oder sonstiges). Es soll nur ein Start Button geben

Code: Alles auswählen

def button_start():
    x = int(eingabefeld.get())
    y = int(eingabefeld.get())
    z = int(eingabefeld.get())
    
 senden_button = Button(fenster, text="Start", command=button_start)
 
 ...
 ...
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast nur ein Eingabefeld `eingabefeld`. Und dieses muß auch als Argument an die Funktion `button_start` übergeben werden. Und keine Eingabe entspricht einem leeren String, daran kannst Du das erkennen.
Xalooz
User
Beiträge: 19
Registriert: Samstag 17. April 2021, 07:28

Das war ein Fehler. Ich habe 3 Eingabefelder

Code: Alles auswählen

def button_start():
    x = int(eingabefeld1.get())
    y = int(eingabefeld2.get())
    z = int(eingabefeld3.get())
    
 senden_button = Button(fenster, text="Start", command=button_start)
 
 ...
 ...
Für jeden muss ich einen Wert eingeben, damit es überhaupt startet. Wie könnte man denn nichts übergeben?und der startet trotzdem
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann fehlen eben mindestens drei Argument für die Funktion `button_start`.
Warum mußt Du das? Was passiert, wenn Du es nicht machst?
Xalooz
User
Beiträge: 19
Registriert: Samstag 17. April 2021, 07:28

Es kommt die Fehlermeldung

Code: Alles auswählen

ValueError: invalid literal for int() with base 10: ''
Ich übergeben keine Integer, aber mein x erwartet einen Wert, wenn ich auf Start Button gehen
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst doch, dass die Eingabe optional ist, dann mußt Du schon auch Code schreiben, der mit diesem Fall umgehen kann, indem Du prüfst, ob die Eingabe ein leerer String ist.
Xalooz
User
Beiträge: 19
Registriert: Samstag 17. April 2021, 07:28

Das ist ja das Problem. Ich kann ja keinen String an einen Int übergeben
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Natürlich kannst du das. “10” ist ein String. Was du wohl meinst ist, dass ein Leerstring nicht in eine Zahl umgewandelt werden kann. Dann musst du das eben prüfen, am besten, indem du die Ausnahme abfängst.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich kannst Du das. Wenn Du Deinen Code zeigen würdest, wäre das viel einfacher zu erklären,
hier mal, wie es aussehen müßte:

Code: Alles auswählen

import tkinter as tk
from functools import partial

def button_start(eingabefeld1, eingabefeld2, eingabefeld3):
    eingabe1 = eingabefeld1.get()
    if not eingabe1.strip():
        # für x wurde nichts eingegeben
        x = 0
    else:
        x = int(eingabe1)
    ...

def main():
    fenster = tk.Tk()
    eingabefeld1 = tk.Entry(fenster)
    eingabefeld1.pack()
    eingabefeld2 = tk.Entry(fenster)
    eingabefeld2.pack()
    eingabefeld3 = tk.Entry(fenster)
    eingabefeld3.pack()
    senden_button = tk.Button(fenster, text="Start", command=partial(button_start,
        eingabefeld1, eingabefeld2, eingabefeld3))
    senden_button.pack()

if __name__ == '__main__':
    main()
Xalooz
User
Beiträge: 19
Registriert: Samstag 17. April 2021, 07:28

Habs hinbekommen, danke!

Fehler war woanders, sodass die Übergabe nicht funktionierte
Antworten