多个组合框列表排序Python(Tkinter)

时间:2018-11-25 02:24:44

标签: python user-interface tkinter

我正在尝试删除在不同组合框上已经选择的值。我的第一次尝试是读取组合框的选定值,然后从列表中将其删除,但这对我不起作用,然后我尝试组装一个函数,该函数将读取哪个组合框更改了其值并将其放在列表中,因此可以将其从主列表中删除,但所有尝试均无效。

窗口代码:

      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 :(得分:0)

我实际上搞砸了一个简单的任务。我要做的第一件事是将所有组合框值放在一个列表中,然后将其与活动的值进行比较,然后删除重复的值。

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)