Pysimplegui: [Frage] Kontrolltext in Eingabefeldern

Erstellt am 27. Jan. 2019  ·  6Kommentare  ·  Quelle: PySimpleGUI/PySimpleGUI

Ich möchte ein Ereignis in einem Eingabefeld generieren, um zu verhindern, dass der Benutzer ein nicht numerisches Zeichen in den Text einfügt (nur numerische Werte sind erlaubt), das kann ich tun. Nun möchte ich aber die Anzahl der Zeichen, die Sie schreiben können, begrenzen, dazu müsste ich den alten String mit dem vergleichen, der beim Generieren des Events vorhanden ist. Ist es keine gute Idee, Zugriff auf die vorherige Eingabezeichenfolge zu gewähren, bevor das Ereignis generiert wurde? Beim Überprüfen des Objekts, das das Ereignis generiert, sehe ich nur das Attribut 'default_text'. Eigentlich sehe ich nicht, wo der eigentliche Text ist (außerhalb von Werten [Schlüssel])

Alle 6 Kommentare

PySimpleGUI speichert keinen Verlauf der Werte, die zuvor in Elementen angezeigt wurden. Dies ist etwas, was Ihre Anwendung tun muss. Speichern Sie den Wert des Eingangs nach einem Lesevorgang und verwenden Sie ihn, um zu vergleichen, wann der nächste Lesevorgang stattfindet.

Ich möchte die Anzahl der Zeichen begrenzen, die Sie schreiben können

Warum können Sie nicht einfach den "Wert" Ihrer Eingabe abrufen und die Länge überprüfen? Wenn es "zu lang" ist, dann setzen Sie das Eingabefeld auf Ihren Wert abzüglich des zuletzt eingegebenen Zeichens.

Folgendes meine ich... dieses Programm lässt nur die Eingabe von 5 Zeichen in das Eingabefeld zu

import PySimpleGUI as sg

layout = [
            [sg.Input(do_not_clear=True, enable_events=True, key='_IN_')],
            [sg.Button('Exit')]
         ]

window = sg.Window('Window Title').Layout(layout)

while True:             # Event Loop
    event, values = window.Read()
    print(event, values)
    if event is None or event == 'Exit':
        break
    if len(values['_IN_']) > 5:
        window.Element('_IN_').Update(values['_IN_'][:-1])

window.Close()

Dieses Problem kommt dem, was ich fragen wollte, sehr nahe: Wie kann man die Eingabe von Int/Float-Zahlen auf nur Zahlen beschränken?

import PySimpleGUI as sg

layout = [  [sg.Text('My Window')],
            [sg.Input(key='-IN-', enable_events=True)],
            [sg.Button('Go'), sg.Button('Exit')]  ]

window = sg.Window('Window Title', layout)

while True:             # Event Loop
    event, values = window.read()
    if event in (None, 'Exit'):
        break
    if event == '-IN-' and values['-IN-'] and values['-IN-'][-1] not in ('0123456789.'):
        window['-IN-'].update(values['-IN-'][:-1])
window.close()

Los geht's ... Ich bin mir nicht sicher, warum dies noch offen ist, also danke, dass Sie es gemeldet haben.
[BEARBEITEN - Entschuldigung für die Änderungen, ich mache immer wieder Fehler]

Dankeschön ! :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen