Множественная сортировка списков в выпадающем списке Python (Tkinter) - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь удалить значения, которые уже выбраны в разных выпадающих списках.Моей первой попыткой было прочитать выбранное значение в выпадающем списке, а затем удалить его из списка, но у меня это не сработало, затем я попытался собрать функцию, которая бы считывала, какой выпадающий список изменил свое значение и поместил его в список так,его можно удалить из основного списка, ни одна из этих попыток не сработала.

КОД ДЛЯ ОКНА:

      class Selector_Canal(tk.Frame):
          def __init__(self, parent, controller):
              #VENTANA
              tk.Frame.__init__(self, parent)
              #LABEL
              label = ttk.Label(self, text="Seleccion de canales", font=Letra_Grande)
              label.pack(pady=10,padx=10)
              #LABEL
             label = ttk.Label(self, text="Argon")
              label.pack()
              #LISTA
              #COMBOBOX
              lista = ["" ,"A", "B", "C", "D"]

              lista_id = []

              combo_var1 = tk.StringVar()
              combo1 = ttk.Combobox(self, values = lista, textvariable=combo_var1, state = 'readonly')
              combo1.current(0)
              combo1.pack(pady=10, padx=10)
              #LABEL
              label = ttk.Label(self, text="Nitrogeno")
              label.pack()
              #COMBOBOX
              combo_var2 = tk.StringVar()
              combo2 = ttk.Combobox(self, values = lista, textvariable=combo_var2, state = 'readonly')
              combo2.current(0)
              combo2.pack(pady=10, padx=10)
              #LABEL
              label = ttk.Label(self, text="Oxigeno")
              label.pack()
              #COMBOBOX
              combo_var3 = tk.StringVar()
              combo3 = ttk.Combobox(self, values = lista, textvariable=combo_var3, state = 'readonly')
              combo3.current(0)
              combo3.pack(pady=10, padx=10)
              #LABEL
              label = ttk.Label(self, text="Hidrogeno")
              label.pack()
              #COMBOBOX
             combo_var4 = tk.StringVar()
             combo4 = ttk.Combobox(self, values =lista, textvariable=combo_var4, state = 'readonly')
              combo4.current(0)
              combo4.pack(pady=10, padx=10)

              combo1.bind("<<ComboboxSelected>>", lambda x: [id_a(lista_id ,lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1,
      combo2, combo3, combo4)])
             combo2.bind("<<ComboboxSelected>>", lambda x: [id_b(lista_id ,lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1,
      combo2, combo3, combo4)])
              combo3.bind("<<ComboboxSelected>>", lambda x: [id_c(lista_id ,lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1,
      combo2, combo3, combo4)])
              combo4.bind("<<ComboboxSelected>>", lambda x: [id_d(lista_id ,lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1,
      combo2, combo3, combo4)])
              #BOTON
              button1 = ttk.Button(self, text="Aceptar",
                                  command=lambda: [normalizacion_canal(combo_var1, combo_var2, combo_var3, combo_var4)])
              button1.pack()
              #BOTON
              button2 = ttk.Button(self, text="Home",
                                  command=lambda: [controller.show_frame(Pagina_Inicio)])
              button2.pack()

CODE OF FUNCTION:

    def id_a(lista_id, lista ,combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4):
        id = 1
        edit_combobox1(lista_id, id, lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4)

    def id_b(lista_id, lista ,combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4):
        id = 2
        edit_combobox1(lista_id, id, lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4)

    def id_c(lista_id, lista ,combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4):
        id = 3
        edit_combobox1(lista_id, id, lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4)

    def id_d(lista_id, lista ,combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4):
        id = 4
        edit_combobox1(lista_id, id, lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4)


def edit_combobox1(lista_id, id, lista, combo_var1, combo_var2, combo_var3, combo_var4, combo1, combo2, combo3, combo4):
    print("\n+++++++++++++++++++++++++++++++++++++\n")
    lista_cache = []
    lista_id.append(id)
    print("Valores de ID en lista: ", lista_id)
    print("ID seleccionado: ", id)
    print("lista: ", lista)
    print("\n")


    if id == 1:
        lista_cache.append(combo_var1.get())
        list((set(lista_cache)))
        print("Valor seleccionado en lista: ", lista_cache)
        print("Valor lista: ", lista)
        lista_editada = list(filter(lambda x: x not in lista_cache, lista))
        print("Lista a imprimir: ", lista_editada)
        print("ID en if: ", lista_id[0])

        print(len(list(set(lista_id))))

        if 'B' in lista_editada and lista_id[0] == 2:
            lista_editada.remove('A')
            print(lista_editada)

        if 'D' in lista_editada and lista_id[0] == 3:
            lista_editada.remove('D')
            print(lista_editada)

        if 'C' in lista_editada and lista_id[0] == 4:
            lista_editada.remove('C')
            print(lista_editada)

        #id_pasado = id
        print("Reimpresion de lista: ",lista_editada)
        combo2.config(values = lista_editada)
        combo3.config(values = lista_editada)
        combo4.config(values = lista_editada)

    if id == 2:
        lista_cache.append(combo_var2.get())
        list((set(lista_cache)))
        print("Valor seleccionado en lista: ", lista_cache)
        lista_editada = list(filter(lambda x: x not in lista_cache, lista))
        print("Lista a imprimir: ", lista)
        print("ID en if: ", lista_id[0])

        print(len(list(set(lista_id))))

        if 'A' in lista_editada and lista_id[0] == 1:
            lista_editada.remove('A')
            print(lista_editada)

        if 'D' in lista_editada and lista_id[0] == 3:
            lista_editada.remove('D')
            print(lista_editada)

        if 'C' in lista_editada and lista_id[0] == 4:
            lista_editada.remove('C')
            print(lista_editada)

        #id_pasado = id
        print("Reimpresion de lista: ",lista_editada)
        combo1.config(values = lista_editada)
        combo3.config(values = lista_editada)
        combo4.config(values = lista_editada)

    if id == 3:
        lista_cache.append(combo_var3.get())
        list((set(lista_cache)))
        print("Valor seleccionado en lista: ", lista_cache)
        lista_editada = list(filter(lambda x: x not in lista_cache, lista))
        print("Lista a imprimir: ", lista_editada)
        print("ID en if: ", lista_id[0])

        if 'A' in lista_editada and lista_id[0] == 1:
            lista_editada.remove('A')
            print(lista_editada)

        if 'B' in lista_editada and lista_id[0] == 2:
            lista_editada.remove('B')
            print(lista_editada)

        if 'D' in lista_editada and lista_id[0] == 4:
            lista_editada.remove('C')
            print(lista_editada)

        print("Reimpresion de lista: ",lista_editada)
        combo1.config(values = lista_editada)
        combo2.config(values = lista_editada)
        combo4.config(values = lista_editada)

    if id == 4:
        lista_cache.append(combo_var4.get())
        list((set(lista_cache)))
        print("Valor seleccionado en lista: ", lista_cache)
        lista_editada = list(filter(lambda x: x not in lista_cache, lista))
        print("Lista a imprimir: ", lista_editada)
        print("ID en if: ", lista_id[0])


        if 'A' in lista_editada and lista_id[0] == 1:
            lista_editada.remove('A')
            print(lista_editada)

        if 'B' in lista_editada and lista_id[0] == 2:
            lista_editada.remove('B')
            print(lista_editada)

        if 'C' in lista_editada and lista_id[0] == 3:
            lista_editada.remove('C')
            print(lista_editada)

        print("Reimpresion de lista: ",lista_editada)
        combo1.config(values = lista_editada)
        combo2.config(values = lista_editada)
        combo4.config(values = lista_editada)

1 Ответ

0 голосов
/ 25 ноября 2018

Я действительно испортил простую задачу.первое, что я сделал, это поместил все значения в выпадающем списке в список, затем я просто сравнил их с активными и удалил повторяющиеся.

val = ['0',combo_var1.get(), combo_var2.get(), combo_var3.get(), combo_var4.get()]
lista_var = [i for i in lista if i not in val or val.remove(i)]
        lista_var.insert(0,0)
        combo2.config(values = lista_var)
        combo3.config(values = lista_var)
        combo4.config(values = lista_var)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...