import customtkinter as ctk
import tkinter as tk
import json
from urllib.request import urlopen
def get_exchange_rates():
try:
url = "https://openexchangerates.org/api/latest.json?app_id=YOUR_APP_ID"
response = urlopen(url)
data = json.loads(response.read().decode("utf-8"))
rates = data["rates"]
return rates
except:
return {
"USD": 1.0,
"EUR": 0.9,
"RUB": 100.0,
"JPY": 140.0,
"CNY": 7.0
}
def convert_currency():
"""Конвертирует валюту."""
try:
amount = float(amount_entry.get()) # Получаем введенную сумму и преобразуем в число
from_currency = from_currency_combobox.get() # Получаем выбранную исходную валюту
to_currency = to_currency_combobox.get() # Получаем выбранную целевую валюту
rates = get_exchange_rates() # Получаем курсы валют
# Конвертация
if from_currency in rates and to_currency in rates:
usd_amount = amount / rates[from_currency] # Сначала переводим в USD
converted_amount = usd_amount * rates[to_currency] # Потом в целевую валюту
result_label.configure(text=f"{amount:.2f} {from_currency} = {converted_amount:.2f} {to_currency}") # форматированный вывод
else:
result_label.configure(text="Ошибка: Неверные валюты.")
except ValueError:
result_label.configure(text="Ошибка: Введите корректную сумму.") # Проверка на корректный ввод
- Основная часть программы
ctk.set_appearance_mode("dark") # Устанавливаем темную тему
ctk.set_default_color_theme("dark-blue") # Устанавливаем тему
window = ctk.CTk()
window.title("Конвертер валют")
window.geometry("400x300") # Задаем размер окна
4. Виджеты (элементы интерфейса)
amount_label = ctk.CTkLabel(window, text="Сумма:")
amount_label.pack(pady=5)
amount_entry = ctk.CTkEntry(window, placeholder_text="Введите сумму")
amount_entry.pack(pady=5)
from_currency_label = ctk.CTkLabel(window, text="Из валюты:")
from_currency_label.pack(pady=5)
currencies = list(get_exchange_rates().keys()) # Получаем список валют
from_currency_combobox = ctk.CTkComboBox(window, values=currencies)
from_currency_combobox.set("USD") # Устанавливаем дефолтное значение
from_currency_combobox.pack(pady=5)
to_currency_label = ctk.CTkLabel(window, text="В валюту:")
to_currency_label.pack(pady=5)
to_currency_combobox = ctk.CTkComboBox(window, values=currencies)
to_currency_combobox.set("EUR") # Устанавливаем дефолтное значение
to_currency_combobox.pack(pady=5)
convert_button = ctk.CTkButton(window, text="Конвертировать", command=convert_currency)
convert_button.pack(pady=10)
result_label = ctk.CTkLabel(window, text="")
result_label.pack(pady=5)
5. Запускаем главный цикл
window.mainloop()