Maneira correta de implementar uma caixa de diálogo de tkinter pop-up personalizada
Acabei de começar a aprender como criar uma caixa de diálogo pop-up personalizada; e, como se vê, otkinter messagebox
é realmente fácil de usar, mas também não faz muito. Aqui está a minha tentativa de criar uma caixa de diálogo que receberá informações e, em seguida, armazene isso no nome de usuário.
Minha pergunta é qual é o estilo recomendado para implementar isso? Como Bryan Oakley sugeriu emeste comentário.
Eu aconselharia contra o uso de uma variável global. Em vez de ter o diálogo destruído, ele destrói apenas o widget real, mas deixa o objeto ativo. Então, ligue para algo comoinputDialog.get_string()
e depoisdel inputDialog
da sua lógica principal.
Talvez usar a variável global para retornar minha string não seja a melhor ideia, mas por quê? E qual é o caminho sugerido? Eu fico confuso porque eu não sei como acionar o getstring uma vez que a janela é destruída, e ... a linha sobre a destruição do widget real, eu não tenho certeza se ele está se referindo aTopLevel
.
A razão pela qual eu peço é porque eu quero que a caixa pop-up seja destruída depois que eu pressiono o botão de envio; porque afinal de contas, eu quero que ele volte ao programa principal, atualize algo, etc. O que deveria ser o método do botão?send
fazer neste caso? Porque a idéia neste exemplo particular é permitir que o usuário faça isso repetidamente, se ele desejar.
<code>import tkinter as tk class MyDialog: def __init__(self, parent): top = self.top = tk.Toplevel(parent) self.myLabel = tk.Label(top, text='Enter your username below') self.myLabel.pack() self.myEntryBox = tk.Entry(top) self.myEntryBox.pack() self.mySubmitButton = tk.Button(top, text='Submit', command=self.send) self.mySubmitButton.pack() def send(self): global username username = self.myEntryBox.get() self.top.destroy() def onClick(): inputDialog = MyDialog(root) root.wait_window(inputDialog.top) print('Username: ', username) username = 'Empty' root = tk.Tk() mainLabel = tk.Label(root, text='Example for pop up input box') mainLabel.pack() mainButton = tk.Button(root, text='Click me', command=onClick) mainButton.pack() root.mainloop() </code>