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 ConverterFrame
classe que herde da ttk.Frame
classe. A ConverterFrame
classe 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
ConverterFrame
precisa de um contêiner, portanto, seu__init__()
método possui ocontainer
argumento. - Dentro do
__init__()
método daConverterCFrame
classe, chame o__init__()
método de sua superclasse. - Atribua os widgets ao
self
objeto para que você possa referenciá-los em outros métodos daConverterFrame
classe. - Atribua a
command
opção doconvert
botão aoself.convert
método.
Terceiro, defina uma App
classe que herda da tk.Tk
classe:
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.