Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

tkinter orientado a objetos

Estou em duvida de como retornar um metodo no tkinter orientado a objetos. Todos os códigos abaixo funcionam, mas no curso da alura é ensinado a colocar "return" ao final dos metodos, e em alguns abaixo eu não coloquei. Qual das organizações abaixo é a correta? Com ou sem "self" dentro do metodo e com o sem "return" ao realizar o "pack" do widget?

Organização número 1

from tkinter import *

class App:
    def __init__(self):
        self.root = Tk()
        self.root.geometry('200x200+600+100')
        self.cria_entry()

        self.root.mainloop()

    def cria_entry(self):
        entry = Entry(self.root, font='Raleway', justify='center', width=4, relief=FLAT)
        entry.pack()

if __name__ == '__main__':
    App()

Organização número 2

from tkinter import *

class App:
    def __init__(self):
        self.root = Tk()
        self.root.geometry('200x200+600+100')
        self.cria_entry()

        self.root.mainloop()

    def cria_entry(self):
        self.entry = Entry(self.root, font='Raleway', justify='center', width=4, relief=FLAT)
        self.entry.pack()

if __name__ == '__main__':
    App()

Organização número 3

from tkinter import *

class App:
    def __init__(self):
        self.root = Tk()
        self.root.geometry('200x200+600+100')
        self.cria_entry()

        self.root.mainloop()

    def cria_entry(self):
        self.entry = Entry(self.root, font='Raleway', justify='center', width=4, relief=FLAT)
        return self.entry.pack()

if __name__ == '__main__':
    App()

Organização número 4

from tkinter import *

class App:
    def __init__(self):
        self.root = Tk()
        self.root.geometry('200x200+600+100')
        self.cria_entry()

        self.root.mainloop()

    def cria_entry(self):
        entry = Entry(self.root, font='Raleway', justify='center', width=4, relief=FLAT)
        return entry.pack()

if __name__ == '__main__':
    App()

Desde já agradeço qualquer tentativa de solucionar minha duvida

3 respostas

Olá Marcos,

Neste contexto que você apresenta não é necessário return, pois o "resultado" da classe App é contruir uma janela, se você chamar o método, certamente o resultado seria None.

Entendi, mas e quanto a segunda duvida? Dentro do metodo que fica fora do init() eu devo colocar o "self"? Eu imagino que sim pois constroi um atributo do objeto que está construindo a janela, mas resolvi perguntar no forum.

solução!

Opa,

Sim, é necessário ter o argumento self, a não ser em casos especiais, mas para isso seria necessário colocar o decorator @staticmethod, mas é outra situação.