首页 > 解决方案 > 如何更新我的自动完成组合框的完整值

问题描述

我正在制作一个在数据库中注册书籍的 python 程序。我制作了两个具有自动完成选项的字段,我希望每当添加新记录时,它都会将添加的新作者和出版商值添加到这两个自动完成字段的列表中,但那没有不会发生,有人可以帮助我吗?非常感谢您提前。

只负责获取注册作者姓名的代码:

def nome_autores(self):
        self.cursor.execute('SELECT autor FROM autores')
        return list(np.array(self.cursor.fetchall()).flatten())

只负责获取注册出版商名称的代码:

def nome_editoras(self):
        self.cursor.execute('SELECT editora FROM editoras')
        return list(np.array(self.cursor.fetchall()).flatten())

当我尝试更新自动完成值列表时:

def adicionar_registro():
    '''
    Esta função é responsável por inserir os valores digitados nos campos de registro da tela
    de registro em questão nas suas devidas tabelas. Caso qualquer dos valores seja um valor
    nulo (valor em branco) ou um valor que não condiza com o seu campo, esta função exibe uma
    mensagem de erro dizendo que algum dos valores digitados está inválido.
    '''
    if drop_down_register.get() == 'Livro':
        titulo = titulo_entry_registro_livro.get().strip()
        autor = autor_entry_registro_livro.get().strip()
        editora = editora_entry_registro_livro.get().strip()
        n_pages = n_pages_entry_registro_livro.get().strip()
        proprietario = proprietario_entry_registro_livro.get().strip()

        if len(titulo) == 0 or len(autor) == 0 or len(editora) == 0 or len(n_pages) == 0 or len(proprietario) == 0 or not n_pages.isdigit():
            messagebox.showinfo('Valores inválidos',
                                'Algum dos valores digitados está inválido!')
        else:
            data_base.add_livro(titulo, autor, editora, n_pages, proprietario)

            titulo_entry_registro_livro.delete(0, END)
            autor_entry_registro_livro.delete(0, END)
            editora_entry_registro_livro.delete(0, END)
            n_pages_entry_registro_livro.delete(0, END)
            proprietario_entry_registro_livro.delete(0, END)

            carrega_tabelas()
            cancelar_registro()

    elif drop_down_register.get() == 'Autor':
        autor = autor_entry_registro_autor.get().strip()

        if len(autor) == 0:
            messagebox.showinfo('Valor inválido', 'Valor digitado inválido')
        else:
            data_base.add_autor(autor)

            autor_entry_registro_autor.delete(0, END)

            carrega_tabelas()
            cancelar_registro()

    elif drop_down_register.get() == 'Editora':
        editora = editora_entry_registro_editora.get().strip()

        if len(editora) == 0:
            messagebox.showinfo('Valor inválido', 'Valor digitado inválido')
        else:
            data_base.add_editora(editora)

            editora_entry_registro_editora.delete(0, END)

            autor_entry_registro_livro['completevalues'] = data_base.nome_autores(
            )
            editora_entry_registro_livro['completevalues'] = data_base.nome_editoras(
            )

            carrega_tabelas()
            cancelar_registro()

autor_entry_registro_livro = AutocompleteCombobox(
    livro_register_frame,
    font='Arial 12',
    completevalues=data_base.nome_autores()
)
autor_entry_registro_livro.grid(row=1, column=1, padx=10, pady=10, sticky=EW)

editora_label_registro_livro = Label(
    livro_register_frame,
    text='Editora',
    font='Arial 12'
)
editora_label_registro_livro.grid(row=2, column=0, padx=10, pady=10)

editora_entry_registro_livro = AutocompleteCombobox(
    livro_register_frame,
    font='Arial 12',
    completevalues=data_base.nome_editoras()
)
editora_entry_registro_livro.grid(row=2, column=1, padx=10, pady=10, sticky=EW)

标签: pythontkinterautocompletettkwidgets

解决方案


推荐阅读