Rozdział 16 · Tworzenie fajnych aplikacji z Tkinter

Mini Project: Konwerter temperatury

Prosta forma – ale z wzorową architekturą: czystą funkcją konwersji niezależną od interfejsu.

W praktyce forma „→ wejściowa sprawdzać → czystą funkcję → wyniku”

konverter_temperatur.py
def celsius_v_farengejty(celsius):
    return celsius * 9 / 5 + 32

def farengejty_v_celsius(farengejty):
    return (farengejty - 32) * 5 / 9

print(round(celsius_v_farengejty(100), 1))    # 212.0
print(round(celsius_v_farengejty(-40), 1))    # -40.0
print(round(celsius_v_farengejty(0), 1))      # 32.0
Temperatura nie musi być dodatnia
0°C, −5°C, −40°C to wszystkie temperatury całkowicie normalne. Przetwornik temperatury nie powinien być nadużywany validate_positive_amount (Rozdział 16.23) odrzuciłby dane ujemne i zerowe jako "błąd". Potrzebne jest ogólne sprawdzenie "czy to liczba?" parse_number.
konverter_gui.py
import tkinter as tk
from tkinter import ttk

def celsius_v_farengejty(celsius):
    return celsius * 9 / 5 + 32

def parse_number(text):
    text = text.strip()
    if not text:
        return False, None, „Pole nie może być puste"
    try:
        return True, float(text), ""
    except ValueError:
        return False, None, „Wprowadź numer”

root = tk.Tk()
celsius_var = tk.StringVar()
result_var = tk.StringVar()

def on_convert():
    ok, value, message = parse_number(celsius_var.get())
    if not ok:
        result_var.set(message)
        return
    farengejty = celsius_v_farengejty(value)
    result_var.set(f"{farengejty:.1f} °F")

ttk.Entry(root, textvariable=celsius_var).pack()
ttk.Button(root, text=„W Fahrenheita”, command=on_convert).pack()
ttk.Label(root, textvariable=result_var).pack()
Konwerter temperatury: -40 wprowadzony, wynik -40,0° F
−40°C = −40°F — jedyny punkt, w którym skale Celsjusza i Fahrenheita pokrywają się. Wynik wykonania powyższego kodu. Przykład wyglądu w środowisku kursu. Na Twoim systemie operacyjnym czcionki, rozmiary i motyw mogą się nieco różnić.
parse_number już wiem
Funkcja parse_number jest taki sam, jak ten, który napisaliśmy w sekcji 16.23. Po napisaniu i przetestowaniu funkcja parsowania liczb przydaje się w kilku projektach — tutaj bez dodatkowego wymogu „pozytywnego”
★★ Zadanie samodzielne
Oba

Dodaj drugie pole oraz przycisk „W stopniach Celsjusza”

Praktyka: Przetwornik temperatury
Testowane bez tkinter – na czystych funkcjach konwersji, w tym wartości ujemnych
Otwórz praktykę →