Python - Problema con for y lista (PySimpleGUI)

 
Vista:
sin imagen de perfil
Val: 233
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Problema con for y lista (PySimpleGUI)

Publicado por smn (62 intervenciones) el 08/11/2020 00:29:26
Muy buenas gente

estoy teniendo un problema a la hora de capturar todos los datos que se almacenan en un input
por ejemplo tengo 7 inputs y en cada uno puedo o no recibir un dato, entonces cuando un input recibe un dato este procede a reemplazar un dato ya definido en una lista, pero si no hay dato en un input quiero que se salte ese input y continúe con el otro

el problema esta en la funcion
1
funcion_editar_notas


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import PySimpleGUI as sg
 
sg.theme("LightBlue6")
 
layout_mostrar_notas = [
    [sg.Text("Seleccione la asignatura que desea visualizar", font=("Arial",15))],
    [sg.Combo(["Programacion Orientada a Objetos","Diseño de Bases de Datos","Algebra","Diseño de Software"],key="combo_mostrar_notas")],
    [sg.Text("Notas",font=("Arial",12))],
    [sg.Text("N1",key="n1_salida"),
     sg.Text("N2",key="n2_salida"),
     sg.Text("N3",key="n3_salida"),
     sg.Text("N4",key="n4_salida"),
     sg.Text("N5",key="n5_salida"),
     sg.Text("N6",key="n6_salida"),
     sg.Text("N7",key="n7_salida")],
    [sg.Button("Mostrar"),sg.Button("Editar Notas"),
     sg.Input(key="editar_n1_entrada",size=(5,1)),
     sg.Input(key="editar_n2_entrada",size=(5,1)),
     sg.Input(key="editar_n3_entrada",size=(5,1)),
     sg.Input(key="editar_n4_entrada",size=(5,1)),
     sg.Input(key="editar_n5_entrada",size=(5,1)),
     sg.Input(key="editar_n6_entrada",size=(5,1)),
     sg.Input(key="editar_n7_entrada",size=(5,1)),
     ]
]
 
def funcion_mostrar_nota(event, value,win,lista):
    if event == "Mostrar" and value.get("combo_mostrar_notas") == "Programacion Orientada a Objetos":
        if len(lista) == 0:
            print("No hay datos en la lista")
        else:
            for i in range(1,8):
                win[f"n{i}_salida"].update(lista[i-1],text_color="blue")
 
def funcion_editar_notas(event,value,win,lista):
    if event == "Editar Notas" and value.get("combo_mostrar_notas") == "Programacion Orientada a Objetos":
        print("paso 1")
        for i in range(1,8):
            print("paso 2")
            if len(value.get(f"editar_n{i}_entrada".isnumeric())) >= 1:
                print("paso 3")
                convertir = int(value.get(f"editar_n{i}_entrada"))
                if convertir >= 1 and convertir <= 7:
                    print("paso 4")
                    lista[i-1] = value.get(f"editar_n{i}_entrada")
                    print(lista)
            else:
                lista[i-1] = lista[i-1]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 233
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Problema con for y lista (PySimpleGUI)

Publicado por smn (62 intervenciones) el 08/11/2020 02:43:11
esta probando algunas cosas y usando un try execpt pude lograr lo que queria pero nose si esto se podra hacer sin el manejo de excepciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def funcion_editar_notas(event,value,win,lista):
    if event == "Editar Notas" and value.get("combo_mostrar_notas") == "Programacion Orientada a Objetos":
        print("paso 1")
        for i in range(1,8):
            print("paso 2")
            try:
                if len(value.get(f"editar_n{i}_entrada".isnumeric())) >= 1:
                    print("paso 3")
                    convertir = int(value.get(f"editar_n{i}_entrada"))
                    if convertir >= 1 and convertir <= 7:
                        print("paso 4")
                        lista[i-1] = value.get(f"editar_n{i}_entrada")
                        print(lista)
                else:
                    if len(value.get(f"editar_n{i}_entrada")) <= 0:
                        print("paso 5")
                        continue
            except Exception as e:
                print(e)





como ven en esta imagen puedo ver las notas que ya están definidas

Captura

aqui cambie las notas de la lista por notas que aparecen en los inputs(Entrys), y el input vacío no cambia la nota que ya esta definida en la lista

Captura2

y esta bien es el resultado que espero.

pero hay alguna forma de hacerlo sin el try except ? no logro entender como debo solucionarlo sin el manejo de errores, lo podría dejar así y seguir en otro lado pero no se si estaría bien, siento que es como si solo le hubiera puesto un parche xD.

por cierto este es el error que me esta dando si no uso el try except


1
2
convertir = int(value.get(f"editar_n{i}_entrada"))
invalid literal for int() with base 10: ''
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar