<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Usmanbek-Vladimir Ahtirskiy</title>
    <description>The latest articles on DEV Community by Usmanbek-Vladimir Ahtirskiy (@vova_dev).</description>
    <link>https://dev.to/vova_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3275985%2Fa65390dd-aec7-4da1-9b5d-bae6e202d36e.png</url>
      <title>DEV Community: Usmanbek-Vladimir Ahtirskiy</title>
      <link>https://dev.to/vova_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vova_dev"/>
    <language>en</language>
    <item>
      <title>Создаём 10 мини игр с помощью pygame</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Mon, 25 Aug 2025 14:35:36 +0000</pubDate>
      <link>https://dev.to/vova_dev/sozdaiom-10-mini-ighr-s-pomoshchiu-pygame-3nhb</link>
      <guid>https://dev.to/vova_dev/sozdaiom-10-mini-ighr-s-pomoshchiu-pygame-3nhb</guid>
      <description>&lt;p&gt;import pygame&lt;/p&gt;

&lt;h1&gt;
  
  
  инициализируем библиотеку Pygame
&lt;/h1&gt;

&lt;p&gt;pygame.init()&lt;/p&gt;

&lt;h1&gt;
  
  
  определяем размеры окна
&lt;/h1&gt;

&lt;p&gt;window_size = (300, 300)&lt;/p&gt;

&lt;h1&gt;
  
  
  задаем название окна
&lt;/h1&gt;

&lt;p&gt;pygame.display.set_caption("Синий фон")&lt;/p&gt;

&lt;h1&gt;
  
  
  создаем окно
&lt;/h1&gt;

&lt;p&gt;screen = pygame.display.set_mode(window_size)&lt;/p&gt;

&lt;h1&gt;
  
  
  задаем цвет фона
&lt;/h1&gt;

&lt;p&gt;background_color = (0, 0, 255)  # синий&lt;/p&gt;

&lt;h1&gt;
  
  
  заполняем фон заданным цветом
&lt;/h1&gt;

&lt;p&gt;screen.fill(background_color)&lt;/p&gt;

&lt;h1&gt;
  
  
  обновляем экран для отображения изменений
&lt;/h1&gt;

&lt;p&gt;pygame.display.flip()&lt;/p&gt;

&lt;h1&gt;
  
  
  показываем окно, пока пользователь не нажмет кнопку "Закрыть"
&lt;/h1&gt;

&lt;p&gt;while True:&lt;br&gt;
    for event in pygame.event.get():&lt;br&gt;
        if event.type == pygame.QUIT:&lt;br&gt;
            pygame.quit()&lt;br&gt;
            exit()&lt;/p&gt;

&lt;p&gt;import pygame&lt;/p&gt;

&lt;p&gt;pygame.init()&lt;/p&gt;

&lt;p&gt;window_size = (400, 400)&lt;br&gt;
screen = pygame.display.set_mode(window_size)&lt;br&gt;
pygame.display.set_caption("Peter the Piglet")&lt;/p&gt;

&lt;h1&gt;
  
  
  загружаем изображение
&lt;/h1&gt;

&lt;p&gt;background_image = pygame.image.load("background.png") # для этого скачаем картину из интернета&lt;/p&gt;

&lt;h1&gt;
  
  
  подгоняем масштаб под размер окна
&lt;/h1&gt;

&lt;p&gt;background_image = pygame.transform.scale(background_image, window_size)&lt;/p&gt;

&lt;h1&gt;
  
  
  накладываем изображение на поверхность
&lt;/h1&gt;

&lt;p&gt;screen.blit(background_image, (0, 0))&lt;/p&gt;

&lt;p&gt;pygame.display.flip()&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    for event in pygame.event.get():&lt;br&gt;
        if event.type == pygame.QUIT:&lt;br&gt;
            pygame.quit()&lt;br&gt;
            exit()&lt;/p&gt;

&lt;p&gt;import pygame&lt;/p&gt;

&lt;p&gt;pygame.init()&lt;br&gt;
pygame.display.set_caption('Измени цвет фона')&lt;br&gt;
window_surface = pygame.display.set_mode((300, 300))&lt;br&gt;
background = pygame.Surface((300, 300))&lt;br&gt;
background.fill(pygame.Color('#000000'))&lt;/p&gt;

&lt;p&gt;color_list = [&lt;br&gt;
    pygame.Color('#FF0000'),  # красный&lt;br&gt;
    pygame.Color('#00FF00'),  # зеленый&lt;br&gt;
    pygame.Color('#0000FF'),  # синий&lt;br&gt;
    pygame.Color('#FFFF00'),  # желтый&lt;br&gt;
    pygame.Color('#00FFFF'),  # бирюзовый&lt;br&gt;
    pygame.Color('#FF00FF'),  # пурпурный&lt;br&gt;
    pygame.Color('#FFFFFF')   # белый&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;current_color_index = 0&lt;/p&gt;

&lt;p&gt;button_font = pygame.font.SysFont('Verdana', 15) # используем шрифт Verdana&lt;br&gt;
button_text_color = pygame.Color("black")&lt;br&gt;
button_color = pygame.Color("gray")&lt;br&gt;
button_rect = pygame.Rect(100, 115, 100, 50)&lt;br&gt;
button_text = button_font.render('Нажми!', True, button_text_color)&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    for event in pygame.event.get():&lt;br&gt;
        if event.type == pygame.QUIT:&lt;br&gt;
            pygame.quit()&lt;br&gt;
            exit()&lt;br&gt;
        elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:&lt;br&gt;
            if button_rect.collidepoint(event.pos):&lt;br&gt;
                current_color_index = (current_color_index + 1) % len(color_list)&lt;br&gt;
                background.fill(color_list[current_color_index])&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    window_surface.blit(background, (0, 0))
    pygame.draw.rect(window_surface, button_color, button_rect)
    button_rect_center = button_text.get_rect(center=button_rect.center)
    window_surface.blit(button_text, button_rect_center)
    pygame.display.update()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;import pygame&lt;br&gt;
import pygame_gui&lt;br&gt;
import random&lt;/p&gt;

&lt;p&gt;window_size = (800, 600)&lt;br&gt;
window = pygame.display.set_mode(window_size)&lt;br&gt;
pygame.display.set_caption('Матрица Lite')&lt;br&gt;
pygame.init()&lt;br&gt;
gui_manager = pygame_gui.UIManager(window_size)&lt;/p&gt;

&lt;p&gt;font = pygame.font.SysFont('Consolas', 20)&lt;br&gt;
text_color = pygame.Color('green')&lt;br&gt;
text_symbols = ['0', '1']&lt;br&gt;
text_pos = [(random.randint(0, window_size[0]), 0) for i in range(50)]&lt;br&gt;
text_speed = [(0, random.randint(1, 5)) for i in range(50)]&lt;br&gt;
text_surface_list = []&lt;/p&gt;

&lt;p&gt;button_size = (100, 50)&lt;br&gt;
button_pos = (350, 250)&lt;br&gt;
button_text = 'Матрица!'&lt;/p&gt;

&lt;p&gt;button = pygame_gui.elements.UIButton(&lt;br&gt;
    relative_rect=pygame.Rect(button_pos, button_size),&lt;br&gt;
    text=button_text,&lt;br&gt;
    manager=gui_manager&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    time_delta = pygame.time.Clock().tick(60) &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        quit()

    if event.type == pygame_gui.UI_BUTTON_PRESSED:
        text_surface_list = []
        for i in range(50):
            text_symbol = random.choice(text_symbols)
            text_surface = font.render(text_symbol, True, text_color)
            text_surface_list.append(text_surface)

    gui_manager.process_events(event)

gui_manager.update(time_delta)

window.fill(pygame.Color('black'))

for i in range(50):
    text_pos[i] = (text_pos[i][0], text_pos[i][1] + text_speed[i][1])
    if text_pos[i][1] &amp;gt; window_size[1]:
        text_pos[i] = (random.randint(0, window_size[0]), -20)
    if len(text_surface_list) &amp;gt; i:
        window.blit(text_surface_list[i], text_pos[i])

gui_manager.draw_ui(window)
pygame.display.update()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;import pygame&lt;br&gt;
import math&lt;/p&gt;

&lt;p&gt;pygame.init()&lt;br&gt;
screen_width = 640&lt;br&gt;
screen_height = 480&lt;br&gt;
screen = pygame.display.set_mode((screen_width, screen_height))&lt;br&gt;
pygame.display.set_caption("Геометрические фигуры")&lt;/p&gt;

&lt;p&gt;black = (0, 0, 0)&lt;br&gt;
white = (255, 255, 255)&lt;br&gt;
red = (255, 0, 0)&lt;br&gt;
green = (0, 255, 0)&lt;br&gt;
blue = (0, 0, 255)&lt;br&gt;
yellow = (255, 255, 0)&lt;br&gt;
pink = (255, 192, 203)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем прямоугольник
&lt;/h1&gt;

&lt;p&gt;rect_x = 50&lt;br&gt;
rect_y = 50&lt;br&gt;
rect_width = 100&lt;br&gt;
rect_height = 50&lt;br&gt;
pygame.draw.rect(screen, red, (rect_x, rect_y, rect_width, rect_height))&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем круг
&lt;/h1&gt;

&lt;p&gt;circle_x = 200&lt;br&gt;
circle_y = 75&lt;br&gt;
circle_radius = 30&lt;br&gt;
pygame.draw.circle(screen, green, (circle_x, circle_y), circle_radius)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем треугольник
&lt;/h1&gt;

&lt;p&gt;triangle_x = 350&lt;br&gt;
triangle_y = 50&lt;br&gt;
triangle_width = 100&lt;br&gt;
triangle_height = 100&lt;br&gt;
triangle_points = [(triangle_x, triangle_y), (triangle_x + triangle_width, triangle_y),&lt;br&gt;
                   (triangle_x + triangle_width / 2, triangle_y + triangle_height)]&lt;br&gt;
pygame.draw.polygon(screen, blue, triangle_points)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем пятиугольник
&lt;/h1&gt;

&lt;p&gt;pent_x = 500&lt;br&gt;
pent_y = 100&lt;br&gt;
radius = 40&lt;br&gt;
sides = 5&lt;br&gt;
pent_points = []&lt;br&gt;
for i in range(sides):&lt;br&gt;
    angle_deg = 360 * i / sides&lt;br&gt;
    angle_rad = math.radians(angle_deg)&lt;br&gt;
    x = pent_x + radius * math.sin(angle_rad)&lt;br&gt;
    y = pent_y - radius * math.cos(angle_rad)&lt;br&gt;
    pent_points.append((x, y))&lt;br&gt;
pygame.draw.polygon(screen, white, pent_points)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем эллипс
&lt;/h1&gt;

&lt;p&gt;ellipse_x = 100&lt;br&gt;
ellipse_y = 275&lt;br&gt;
ellipse_width = 150&lt;br&gt;
ellipse_height = 60&lt;br&gt;
pygame.draw.ellipse(screen, red, (ellipse_x, ellipse_y, ellipse_width, ellipse_height))&lt;/p&gt;

&lt;h1&gt;
  
  
  горизонтальная линия
&lt;/h1&gt;

&lt;p&gt;horiz_line_y = 400&lt;br&gt;
pygame.draw.line(screen, blue, (50, horiz_line_y), (590, horiz_line_y), 5)&lt;/p&gt;

&lt;h1&gt;
  
  
  вертикальная линия
&lt;/h1&gt;

&lt;p&gt;vert_line_x = 320&lt;br&gt;
pygame.draw.line(screen, green, (vert_line_x, 50), (vert_line_x, 430), 5)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем желтую звезду
&lt;/h1&gt;

&lt;p&gt;yellow_star_points = [(260 - 50, 250 - 70), (310 - 50, 250 - 70), (325 - 50, 200 - 70),&lt;br&gt;
                      (340 - 50, 250 - 70), (390 - 50, 250 - 70), (350 - 50, 290 - 70),&lt;br&gt;
                      (365 - 50, 340 - 70), (325 - 50, 305 - 70), (285 - 50, 340 - 70),&lt;br&gt;
                      (300 - 50, 290 - 70)]&lt;br&gt;
pygame.draw.polygon(screen, yellow, yellow_star_points)&lt;/p&gt;

&lt;h1&gt;
  
  
  рисуем окружность с квадратом внутри
&lt;/h1&gt;

&lt;p&gt;circle2_x = 490&lt;br&gt;
circle2_y = 350&lt;br&gt;
circle2_radius = 80&lt;br&gt;
pygame.draw.circle(screen, white, (circle2_x, circle2_y), circle2_radius)&lt;br&gt;
square_side = 60&lt;br&gt;
square_x = circle2_x - square_side / 2&lt;br&gt;
square_y = circle2_y - square_side / 2&lt;br&gt;
pygame.draw.rect(screen, pink, (square_x, square_y, square_side, square_side))&lt;/p&gt;

&lt;p&gt;pygame.display.update()&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    for event in pygame.event.get():&lt;br&gt;
        if event.type == pygame.QUIT:&lt;br&gt;
            pygame.quit()&lt;br&gt;
            quit()&lt;/p&gt;

&lt;p&gt;import pygame&lt;br&gt;
import random&lt;/p&gt;

&lt;p&gt;pygame.init()&lt;/p&gt;

&lt;p&gt;screen_width = 640&lt;br&gt;
screen_height = 480&lt;br&gt;
screen = pygame.display.set_mode((screen_width, screen_height))&lt;br&gt;
pygame.display.set_caption("Звезды падают вниз")&lt;/p&gt;

&lt;p&gt;black = (0, 0, 0)&lt;br&gt;
white = (255, 255, 255)&lt;br&gt;
pink = (255, 192, 203)&lt;/p&gt;

&lt;p&gt;font = pygame.font.SysFont("Verdana", 15)&lt;/p&gt;

&lt;p&gt;star_list = []&lt;br&gt;
for i in range(50):&lt;br&gt;
    x = random.randrange(screen_width)&lt;br&gt;
    y = random.randrange(-200, -50)&lt;br&gt;
    speed = random.randrange(1, 5)&lt;br&gt;
    star_list.append([x, y, speed])&lt;br&gt;
score = 0&lt;/p&gt;

&lt;p&gt;freeze = False # флаг для определения момента остановки&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    for event in pygame.event.get():&lt;br&gt;
        if event.type == pygame.QUIT:&lt;br&gt;
            pygame.quit()&lt;br&gt;
            quit()&lt;br&gt;
        if event.type == pygame.MOUSEBUTTONDOWN: # останавливаем падение звезд по клику&lt;br&gt;
            freeze = True&lt;br&gt;
        if event.type == pygame.KEYDOWN:&lt;br&gt;
            if event.key == pygame.K_RETURN: # возобновляем движение вниз, если нажат Enter&lt;br&gt;
                freeze = False&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if not freeze: # если флаг не активен,
    # звезды падают вниз
    for star in star_list:
        star[1] += star[2]
        if star[1] &amp;gt; screen_height:
            star[0] = random.randrange(screen_width)
            star[1] = random.randrange(-200, -50)
            score += 1

# рисуем звезды, выводим результаты подсчета
screen.fill(black)
for star in star_list:
    pygame.draw.circle(screen, pink, (star[0], star[1]), 3)
score_text = font.render("Упало звезд: " + str(score), True, white)
screen.blit(score_text, (10, 10))

pygame.display.update()

# устанавливаем частоту обновления экрана
pygame.time.Clock().tick(60)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>pygame</category>
      <category>minigamesonpythonandpygame</category>
    </item>
    <item>
      <title>Приложение на tk</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Mon, 11 Aug 2025 14:31:12 +0000</pubDate>
      <link>https://dev.to/vova_dev/prilozhieniia-na-tk-4jni</link>
      <guid>https://dev.to/vova_dev/prilozhieniia-na-tk-4jni</guid>
      <description>&lt;p&gt;import tkinter as tk&lt;br&gt;
from tkinter import messagebox&lt;/p&gt;

&lt;p&gt;class Calculator:&lt;br&gt;
    def &lt;strong&gt;init&lt;/strong&gt;(self):&lt;br&gt;
        self.window = tk.Tk()&lt;br&gt;
        self.window.title("Калькулятор")&lt;br&gt;
        self.window.geometry("300x400")&lt;br&gt;
        self.window.resizable(False, False)&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    self.expression = ""&lt;br&gt;
    self.result_var = tk.StringVar()
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.create_widgets()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;def create_widgets(self):&lt;br&gt;
    # Поле отображения результата&lt;br&gt;
    result_frame = tk.Frame(self.window)&lt;br&gt;
    result_frame.pack(fill=tk.X, padx=5, pady=5)&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;result_entry = tk.Entry(
    result_frame,
    textvariable=self.result_var,
    font=("Arial", 16),
    justify="right",
    state="readonly"
)
result_entry.pack(fill=tk.X)

# Кнопки
button_frame = tk.Frame(self.window)
button_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

buttons = [
    ['C', '/', '*', 'Del'],
    ['7', '8', '9', '-'],
    ['4', '5', '6', '+'],
    ['1', '2', '3', '='],
    ['0', '.', '', '']
]

for i, row in enumerate(buttons):
    for j, text in enumerate(row):
        if text:
            if text == '0':
                btn = tk.Button(
                    button_frame,
                    text=text,
                    font=("Arial", 14),
                    command=lambda t=text: self.button_click(t)
                )
                btn.grid(row=i, column=j, columnspan=2, sticky="nsew", padx=1, pady=1)
            else:
                btn = tk.Button(
                    button_frame,
                    text=text,
                    font=("Arial", 14),
                    command=lambda t=text: self.button_click(t)
                )
                btn.grid(row=i, column=j, sticky="nsew", padx=1, pady=1)

# Настройка сетки
for i in range(5):
    button_frame.grid_rowconfigure(i, weight=1)
for j in range(4):
    button_frame.grid_columnconfigure(j, weight=1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;def button_click(self, char):&lt;br&gt;
    if char == 'C':&lt;br&gt;
        self.expression = ""&lt;br&gt;
    elif char == 'Del':&lt;br&gt;
        self.expression = self.expression[:-1]&lt;br&gt;
    elif char == '=':&lt;br&gt;
        try:&lt;br&gt;
            result = eval(self.expression)&lt;br&gt;
            self.expression = str(result)&lt;br&gt;
        except:&lt;br&gt;
            messagebox.showerror("Ошибка", "Неверное выражение")&lt;br&gt;
            self.expression = ""&lt;br&gt;
    else:&lt;br&gt;
        self.expression += char&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.result_var.set(self.expression)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;def run(self):&lt;br&gt;
    self.window.mainloop()&lt;br&gt;
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Запуск калькулятора&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    calc = Calculator()&lt;br&gt;
    calc.run()&lt;/p&gt;

</description>
      <category>tkinter</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>customtkinter|tkinter|json|urllib.requests|urlopen</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 11 Jul 2025 14:33:00 +0000</pubDate>
      <link>https://dev.to/vova_dev/customtkintertkinterjsonurllibrequestsurlopen-28lm</link>
      <guid>https://dev.to/vova_dev/customtkintertkinterjsonurllibrequestsurlopen-28lm</guid>
      <description>&lt;p&gt;import customtkinter as ctk&lt;br&gt;
import tkinter as tk&lt;br&gt;
import json&lt;br&gt;
from urllib.request import urlopen&lt;/p&gt;

&lt;p&gt;def get_exchange_rates():&lt;br&gt;
    try:&lt;br&gt;
        url = "&lt;a href="https://openexchangerates.org/api/latest.json?app_id=YOUR_APP_ID" rel="noopener noreferrer"&gt;https://openexchangerates.org/api/latest.json?app_id=YOUR_APP_ID&lt;/a&gt;"&lt;br&gt;
        response = urlopen(url)&lt;br&gt;
        data = json.loads(response.read().decode("utf-8"))&lt;br&gt;
        rates = data["rates"]&lt;br&gt;
        return rates&lt;br&gt;
    except:&lt;br&gt;
        return {&lt;br&gt;
            "USD": 1.0,&lt;br&gt;
            "EUR": 0.9,&lt;br&gt;
            "RUB": 100.0,&lt;br&gt;
            "JPY": 140.0,&lt;br&gt;
            "CNY": 7.0&lt;br&gt;
        }&lt;/p&gt;

&lt;p&gt;def convert_currency():&lt;br&gt;
    """Конвертирует валюту."""&lt;br&gt;
    try:&lt;br&gt;
        amount = float(amount_entry.get()) # Получаем введенную сумму и преобразуем в число&lt;br&gt;
        from_currency = from_currency_combobox.get() # Получаем выбранную исходную валюту&lt;br&gt;
        to_currency = to_currency_combobox.get()   # Получаем выбранную целевую валюту&lt;br&gt;
        rates = get_exchange_rates()  # Получаем курсы валют&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    # Конвертация&lt;br&gt;
    if from_currency in rates and to_currency in rates:&lt;br&gt;
        usd_amount = amount / rates[from_currency]  #  Сначала переводим в USD&lt;br&gt;
        converted_amount = usd_amount * rates[to_currency]  #  Потом в целевую валюту&lt;br&gt;
        result_label.configure(text=f"{amount:.2f} {from_currency} = {converted_amount:.2f} {to_currency}") # форматированный вывод&lt;br&gt;
    else:&lt;br&gt;
        result_label.configure(text="Ошибка: Неверные валюты.")&lt;br&gt;
except ValueError:&lt;br&gt;
    result_label.configure(text="Ошибка: Введите корректную сумму.") # Проверка на корректный ввод&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  

&lt;ol&gt;
&lt;li&gt;Основная часть программы
&lt;/li&gt;
&lt;/ol&gt;
&lt;/h1&gt;


&lt;p&gt;ctk.set_appearance_mode("dark")  # Устанавливаем темную тему&lt;br&gt;
ctk.set_default_color_theme("dark-blue")  # Устанавливаем тему&lt;/p&gt;

&lt;p&gt;window = ctk.CTk()&lt;br&gt;
window.title("Конвертер валют")&lt;br&gt;
window.geometry("400x300")  # Задаем размер окна&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Виджеты (элементы интерфейса)
&lt;/h1&gt;

&lt;p&gt;amount_label = ctk.CTkLabel(window, text="Сумма:")&lt;br&gt;
amount_label.pack(pady=5)&lt;/p&gt;

&lt;p&gt;amount_entry = ctk.CTkEntry(window, placeholder_text="Введите сумму")&lt;br&gt;
amount_entry.pack(pady=5)&lt;/p&gt;

&lt;p&gt;from_currency_label = ctk.CTkLabel(window, text="Из валюты:")&lt;br&gt;
from_currency_label.pack(pady=5)&lt;/p&gt;

&lt;p&gt;currencies = list(get_exchange_rates().keys()) # Получаем список валют&lt;br&gt;
from_currency_combobox = ctk.CTkComboBox(window, values=currencies)&lt;br&gt;
from_currency_combobox.set("USD")  #  Устанавливаем дефолтное значение&lt;br&gt;
from_currency_combobox.pack(pady=5)&lt;/p&gt;

&lt;p&gt;to_currency_label = ctk.CTkLabel(window, text="В валюту:")&lt;br&gt;
to_currency_label.pack(pady=5)&lt;/p&gt;

&lt;p&gt;to_currency_combobox = ctk.CTkComboBox(window, values=currencies)&lt;br&gt;
to_currency_combobox.set("EUR")  #  Устанавливаем дефолтное значение&lt;br&gt;
to_currency_combobox.pack(pady=5)&lt;/p&gt;

&lt;p&gt;convert_button = ctk.CTkButton(window, text="Конвертировать", command=convert_currency)&lt;br&gt;
convert_button.pack(pady=10)&lt;/p&gt;

&lt;p&gt;result_label = ctk.CTkLabel(window, text="")&lt;br&gt;
result_label.pack(pady=5)&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Запускаем главный цикл
&lt;/h1&gt;

&lt;p&gt;window.mainloop()&lt;/p&gt;

</description>
      <category>ctk</category>
      <category>tk</category>
      <category>json</category>
      <category>urlopen</category>
    </item>
    <item>
      <title>Python | Tkinter | Messagebox</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 11 Jul 2025 14:26:38 +0000</pubDate>
      <link>https://dev.to/vova_dev/python-tkinter-messagebox-4a3a</link>
      <guid>https://dev.to/vova_dev/python-tkinter-messagebox-4a3a</guid>
      <description>&lt;p&gt;from tkinter import *&lt;br&gt;
from tkinter import ttk&lt;br&gt;
from tkinter.messagebox import showerror, showwarning, showinfo&lt;/p&gt;

&lt;p&gt;root = Tk()&lt;br&gt;
root.title("METANIT.COM")&lt;br&gt;
root.geometry("250x200")&lt;/p&gt;

&lt;p&gt;def open_info(): &lt;br&gt;
    showinfo(title="Информация", message="Информационное сообщение")&lt;/p&gt;

&lt;p&gt;def open_warning(): &lt;br&gt;
    showwarning(title="Предупреждение", message="Сообщение о предупреждении")&lt;/p&gt;

&lt;p&gt;def open_error(): &lt;br&gt;
    showerror(title="Ошибка", message="Сообщение об ошибке")&lt;/p&gt;

&lt;p&gt;info_button = ttk.Button(text="Информация", command=open_info)&lt;br&gt;
info_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;warning_button = ttk.Button(text="Предупреждение", command=open_warning)&lt;br&gt;
warning_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;error_button = ttk.Button(text="Ошибка", command=open_error)&lt;br&gt;
error_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;root.mainloop()&lt;/p&gt;

</description>
      <category>python</category>
      <category>tkinter</category>
      <category>messagebox</category>
      <category>programming</category>
    </item>
    <item>
      <title>Python | Tkinter | Messagebox</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 04 Jul 2025 08:29:13 +0000</pubDate>
      <link>https://dev.to/vova_dev/python-tkinter-messagebox-242l</link>
      <guid>https://dev.to/vova_dev/python-tkinter-messagebox-242l</guid>
      <description>&lt;p&gt;И&lt;/p&gt;

</description>
      <category>python</category>
      <category>tkinter</category>
      <category>messagebox</category>
      <category>programming</category>
    </item>
    <item>
      <title>tkinter messagebox</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 27 Jun 2025 10:22:12 +0000</pubDate>
      <link>https://dev.to/vova_dev/tkinter-messagebox-5b4m</link>
      <guid>https://dev.to/vova_dev/tkinter-messagebox-5b4m</guid>
      <description>&lt;p&gt;from tkinter import *&lt;br&gt;
from tkinter import ttk&lt;br&gt;
from tkinter.messagebox import showerror, showwarning, showinfo&lt;/p&gt;

&lt;p&gt;root = Tk()&lt;br&gt;
root.title("METANIT.COM")&lt;br&gt;
root.geometry("250x200")&lt;/p&gt;

&lt;p&gt;def open_info(): &lt;br&gt;
    showinfo(title="Информация", message="Информационное сообщение")&lt;/p&gt;

&lt;p&gt;def open_warning(): &lt;br&gt;
    showwarning(title="Предупреждение", message="Сообщение о предупреждении")&lt;/p&gt;

&lt;p&gt;def open_error(): &lt;br&gt;
    showerror(title="Ошибка", message="Сообщение об ошибке")&lt;/p&gt;

&lt;p&gt;info_button = ttk.Button(text="Информация", command=open_info)&lt;br&gt;
info_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;warning_button = ttk.Button(text="Предупреждение", command=open_warning)&lt;br&gt;
warning_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;error_button = ttk.Button(text="Ошибка", command=open_error)&lt;br&gt;
error_button.pack(anchor="center", expand=1)&lt;/p&gt;

&lt;p&gt;root.mainloop()&lt;/p&gt;

</description>
      <category>python</category>
      <category>tkinter</category>
      <category>messagebox</category>
      <category>tk</category>
    </item>
    <item>
      <title>class cat and class mouse</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 27 Jun 2025 10:11:28 +0000</pubDate>
      <link>https://dev.to/vova_dev/class-cat-and-class-mouse-3laa</link>
      <guid>https://dev.to/vova_dev/class-cat-and-class-mouse-3laa</guid>
      <description>&lt;p&gt;class Cat:&lt;br&gt;
    def &lt;em&gt;init&lt;/em&gt;(self, power, speed, vid, age, name):&lt;br&gt;
        self.power = power&lt;br&gt;
        self.speed = speed&lt;br&gt;
        self.vid = vid&lt;br&gt;
        self.age = age&lt;br&gt;
        self.name = name&lt;br&gt;
        print(f"Cat's power: {self.power}, Cat's speed: {self.speed}, Cat's vid: {self.vid}, Cat's age: {self.age}, Cat's name: {self.name}")&lt;/p&gt;

&lt;p&gt;class Mouse:&lt;br&gt;
    def &lt;em&gt;init&lt;/em&gt;(self, power, speed, vid, age, name):&lt;br&gt;
        self.power = power&lt;br&gt;
        self.speed = speed&lt;br&gt;
        self.vid = vid&lt;br&gt;
        self.age = age&lt;br&gt;
        self.name = name&lt;br&gt;
        print(f"Mouse power: {self.power}, Mouse speed: {self.speed}, Mouse vid: {self.vid}, Mouse age: {self.age}, Mouse name: {self.name}")&lt;/p&gt;

&lt;p&gt;song_of_ice = Cat(15, 15, "cat", 15, "song of ice")&lt;br&gt;
noarchik = Mouse(11, 11, "mouse", 11, "noarchik")&lt;/p&gt;

&lt;p&gt;print(song_of_ice.power)&lt;br&gt;
print(song_of_ice.speed)&lt;br&gt;
print(song_of_ice.vid)&lt;br&gt;
print(song_of_ice.age)&lt;br&gt;
print(song_of_ice.name)&lt;br&gt;
print(noarchik.power)&lt;br&gt;
print(noarchik.speed)&lt;br&gt;
print(noarchik.vid)&lt;br&gt;
print(noarchik.age)&lt;br&gt;
print(noarchik.name)&lt;/p&gt;

&lt;p&gt;if song_of_ice.power &amp;gt; noarchik.power:&lt;br&gt;
    print(f"song_of_ice is win!")&lt;br&gt;
elif song_of_ice.power &amp;lt; noarchik.power:&lt;br&gt;
    print(f"noarchik is win!")&lt;br&gt;
else:&lt;br&gt;
    print(f"draw!")&lt;/p&gt;

</description>
    </item>
    <item>
      <title>pac-man with python, pygame</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 27 Jun 2025 09:13:35 +0000</pubDate>
      <link>https://dev.to/vova_dev/pac-man-with-python-pygame-14e5</link>
      <guid>https://dev.to/vova_dev/pac-man-with-python-pygame-14e5</guid>
      <description>&lt;p&gt;from random import choice&lt;br&gt;
from turtle import *&lt;/p&gt;

&lt;p&gt;from freegames import floor, vector&lt;/p&gt;

&lt;p&gt;state = {'score': 0}&lt;br&gt;
path = Turtle(visible=False)&lt;br&gt;
writer = Turtle(visible=False)&lt;br&gt;
aim = vector(5, 0)&lt;br&gt;
pacman = vector(-40, -80)&lt;br&gt;
ghosts = [&lt;br&gt;
    [vector(-180, 160), vector(5, 0)],&lt;br&gt;
    [vector(-180, -160), vector(0, 5)],&lt;br&gt;
    [vector(100, 160), vector(0, -5)],&lt;br&gt;
    [vector(100, -160), vector(-5, 0)],&lt;br&gt;
]&lt;/p&gt;

&lt;h1&gt;
  
  
  fmt: off
&lt;/h1&gt;

&lt;p&gt;tiles = [&lt;br&gt;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,&lt;br&gt;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,&lt;br&gt;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,&lt;br&gt;
]&lt;/p&gt;

&lt;h1&gt;
  
  
  fmt: on
&lt;/h1&gt;

&lt;p&gt;def square(x, y):&lt;br&gt;
    """Draw square using path at (x, y)."""&lt;br&gt;
    path.up()&lt;br&gt;
    path.goto(x, y)&lt;br&gt;
    path.down()&lt;br&gt;
    path.begin_fill()&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for count in range(4):
    path.forward(20)
    path.left(90)

path.end_fill()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def offset(point):&lt;br&gt;
    """Return offset of point in tiles."""&lt;br&gt;
    x = (floor(point.x, 20) + 200) / 20&lt;br&gt;
    y = (180 - floor(point.y, 20)) / 20&lt;br&gt;
    index = int(x + y * 20)&lt;br&gt;
    return index&lt;/p&gt;

&lt;p&gt;def valid(point):&lt;br&gt;
    """Return True if point is valid in tiles."""&lt;br&gt;
    index = offset(point)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if tiles[index] == 0:
    return False

index = offset(point + 19)

if tiles[index] == 0:
    return False

return point.x % 20 == 0 or point.y % 20 == 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def world():&lt;br&gt;
    """Draw world using path."""&lt;br&gt;
    bgcolor('black')&lt;br&gt;
    path.color('blue')&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for index in range(len(tiles)):
    tile = tiles[index]

    if tile &amp;gt; 0:
        x = (index % 20) * 20 - 200
        y = 180 - (index // 20) * 20
        square(x, y)

        if tile == 1:
            path.up()
            path.goto(x + 10, y + 10)
            path.dot(2, 'white')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def move():&lt;br&gt;
    """Move pacman and all ghosts."""&lt;br&gt;
    writer.undo()&lt;br&gt;
    writer.write(state['score'])&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clear()

if valid(pacman + aim):
    pacman.move(aim)

index = offset(pacman)

if tiles[index] == 1:
    tiles[index] = 2
    state['score'] += 1
    x = (index % 20) * 20 - 200
    y = 180 - (index // 20) * 20
    square(x, y)

up()
goto(pacman.x + 10, pacman.y + 10)
dot(20, 'yellow')

for point, course in ghosts:
    if valid(point + course):
        point.move(course)
    else:
        options = [
            vector(5, 0),
            vector(-5, 0),
            vector(0, 5),
            vector(0, -5),
        ]
        plan = choice(options)
        course.x = plan.x
        course.y = plan.y

    up()
    goto(point.x + 10, point.y + 10)
    dot(20, 'red')

update()

for point, course in ghosts:
    if abs(pacman - point) &amp;lt; 20:
        return

ontimer(move, 100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def change(x, y):&lt;br&gt;
    """Change pacman aim if valid."""&lt;br&gt;
    if valid(pacman + vector(x, y)):&lt;br&gt;
        aim.x = x&lt;br&gt;
        aim.y = y&lt;/p&gt;

&lt;p&gt;setup(420, 420, 370, 0)&lt;br&gt;
hideturtle()&lt;br&gt;
tracer(False)&lt;br&gt;
writer.goto(160, 160)&lt;br&gt;
writer.color('white')&lt;br&gt;
writer.write(state['score'])&lt;br&gt;
listen()&lt;br&gt;
onkey(lambda: change(5, 0), 'Right')&lt;br&gt;
onkey(lambda: change(-5, 0), 'Left')&lt;br&gt;
onkey(lambda: change(0, 5), 'Up')&lt;br&gt;
onkey(lambda: change(0, -5), 'Down')&lt;br&gt;
world()&lt;br&gt;
move()&lt;br&gt;
done()&lt;/p&gt;

</description>
      <category>python</category>
      <category>pygame</category>
      <category>games</category>
      <category>programming</category>
    </item>
    <item>
      <title>почему я бросил python и начал html</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 20 Jun 2025 15:08:56 +0000</pubDate>
      <link>https://dev.to/vova_dev/pochiemu-ia-brosil-python-i-nachal-html-45m8</link>
      <guid>https://dev.to/vova_dev/pochiemu-ia-brosil-python-i-nachal-html-45m8</guid>
      <description>&lt;p&gt;Раньше я занимался python и много о нём узнал. Я создавал к&lt;/p&gt;

</description>
      <category>python</category>
      <category>html</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>первый pygame</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 20 Jun 2025 14:57:48 +0000</pubDate>
      <link>https://dev.to/vova_dev/piervyi-pygame-59i4</link>
      <guid>https://dev.to/vova_dev/piervyi-pygame-59i4</guid>
      <description>&lt;p&gt;i&lt;/p&gt;

</description>
      <category>python</category>
      <category>codenewbie</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Fri, 20 Jun 2025 09:22:33 +0000</pubDate>
      <link>https://dev.to/vova_dev/tkinter-15hd</link>
      <guid>https://dev.to/vova_dev/tkinter-15hd</guid>
      <description></description>
      <category>vibecoding</category>
    </item>
    <item>
      <title>tkinter</title>
      <dc:creator>Usmanbek-Vladimir Ahtirskiy</dc:creator>
      <pubDate>Thu, 19 Jun 2025 08:47:11 +0000</pubDate>
      <link>https://dev.to/vova_dev/tkinter-3bd4</link>
      <guid>https://dev.to/vova_dev/tkinter-3bd4</guid>
      <description>&lt;p&gt;import tkinter as tk&lt;/p&gt;

&lt;p&gt;root = tk.Tk()&lt;/p&gt;

&lt;p&gt;root.title("tkinter")&lt;/p&gt;

&lt;p&gt;root.geometry("250x250")&lt;/p&gt;

&lt;p&gt;root.mainloop()&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
