Desenvolvendo uma aplicação completa orientada a objetos Tkinter

Resumo : neste tutorial, você aprenderá como desenvolver uma aplicação Tkinter completa orientada a objetos.

Você converterá o aplicativo conversor de temperatura em um novo que usa abordagem de programação orientada a objetos :

Primeiro, defina uma classe chamada TemperatureConverter. A classe possui um método estático que converte uma temperatura de Fahrenheit para Celsius:

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror


class TemperatureConverter:
    @staticmethod
    def fahrenheit_to_celsius(f):
        return (f - 32) * 5 / 9
Linguagem de código:  Python  ( python )

Segundo, defina uma ConverterFrameclasse que herde da ttk.Frameclasse. A ConverterFrameclasse será responsável por criar widgets e tratar eventos:


class ConverterFrame(ttk.Frame):
    def __init__(self, container):
        super().__init__(container)
        # field options
        options = {'padx': 5, 'pady': 5}

        # temperature label
        self.temperature_label = ttk.Label(self, text='Fahrenheit')
        self.temperature_label.grid(column=0, row=0, sticky=tk.W, **options)

        # temperature entry
        self.temperature = tk.StringVar()
        self.temperature_entry = ttk.Entry(self, textvariable=self.temperature)
        self.temperature_entry.grid(column=1, row=0, **options)
        self.temperature_entry.focus()

        self.convert_button = ttk.Button(self, text='Convert')
        self.convert_button['command'] = self.convert
        self.convert_button.grid(column=2, row=0, sticky=tk.W, **options)

        # result label
        self.result_label = ttk.Label(self)
        self.result_label.grid(row=1, columnspan=3, **options)

        # add padding to the frame and show it
        self.grid(padx=10, pady=10, sticky=tk.NSEW)

    def convert(self):
        """  Handle button click event
        """
        try:
            f = float(self.temperature.get())
            c = TemperatureConverter.fahrenheit_to_celsius(f)
            result = f'{f} Fahrenheit = {c:.2f} Celsius'
            self.result_label.config(text=result)
        except ValueError as error:
            showerror(title='Error', message=error)
Linguagem de código:  Python  ( python )

Como funciona:

  • O ConverterFrameprecisa de um contêiner, portanto, seu __init__()método possui o containerargumento.
  • Dentro do __init__()método da ConverterCFrameclasse, chame o __init__()método de sua superclasse.
  • Atribua os widgets ao selfobjeto para que você possa referenciá-los em outros métodos da ConverterFrameclasse.
  • Atribua a commandopção do convertbotão ao self.convertmétodo.

Terceiro, defina uma Appclasse que herda da tk.Tkclasse:

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title('Temperature Converter')
        self.geometry('300x70')
        self.resizable(False, False)Linguagem de código:  Python  ( python )

Por fim, inicialize o aplicativo a partir do if __name__ == "__main__"bloco:

if __name__ == "__main__":
    app = App()
    ConverterFrame(app)
    app.mainloop()
Linguagem de código:  Python  ( python )

Junte tudo:

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror


class TemperatureConverter:
    @staticmethod
    def fahrenheit_to_celsius(f):
        return (f - 32) * 5 / 9


class ConverterFrame(ttk.Frame):
    def __init__(self, container):
        super().__init__(container)
        # field options
        options = {'padx': 5, 'pady': 5}

        # temperature label
        self.temperature_label = ttk.Label(self, text='Fahrenheit')
        self.temperature_label.grid(column=0, row=0, sticky=tk.W, **options)

        # temperature entry
        self.temperature = tk.StringVar()
        self.temperature_entry = ttk.Entry(self, textvariable=self.temperature)
        self.temperature_entry.grid(column=1, row=0, **options)
        self.temperature_entry.focus()

        self.convert_button = ttk.Button(self, text='Convert')
        self.convert_button['command'] = self.convert
        self.convert_button.grid(column=2, row=0, sticky=tk.W, **options)

        # result label
        self.result_label = ttk.Label(self)
        self.result_label.grid(row=1, columnspan=3, **options)

        # add padding to the frame and show it
        self.grid(padx=10, pady=10, sticky=tk.NSEW)

    def convert(self):
        """  Handle button click event
        """
        try:
            f = float(self.temperature.get())
            c = TemperatureConverter.fahrenheit_to_celsius(f)
            result = f'{f} Fahrenheit = {c:.2f} Celsius'
            self.result_label.config(text=result)
        except ValueError as error:
            showerror(title='Error', message=error)


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title('Temperature Converter')
        self.geometry('300x70')
        self.resizable(False, False)


if __name__ == "__main__":
    app = App()
    ConverterFrame(app)
    app.mainloop()
Linguagem de código:  Python  ( python )

Neste tutorial, você aprendeu como desenvolver um aplicativo Tkinter totalmente orientado a objetos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *