/
yarik2
/
github_user_finder
Обзор
Документация
Войти
/
yarik2
/
github_user_finder
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
92 строки
4 KB
yarik2
create: .gitignore, main.py, README.md, tasks.json, test_app.py
04 май 2026, 11:28
Верифицирован
04 май 2026, 11:28
0483c25
Код
Авторство
О чём код?
import tkinter as tk from tkinter import messagebox, ttk import requests import json import os FAVORITES_FILE = 'favorites.json' class GitHubUserFinder: def __init__(self, root): self.root = root self.root.title("GitHub User Finder") self.favorites = self.load_favorites() self.create_widgets() def create_widgets(self): # Поле ввода self.search_entry = tk.Entry(self.root, width=30, font=('Arial', 14)) self.search_entry.grid(row=0, column=0, padx=10, pady=10) # Поиск self.search_button = tk.Button(self.root, text="Поиск", command=self.search_user) self.search_button.grid(row=0, column=1, padx=10) # Результаты поиска self.results_list = tk.Listbox(self.root, width=50, height=10, font=('Arial', 12)) self.results_list.grid(row=1, column=0, columnspan=2, padx=10, pady=10) # Добавить в избранное self.add_fav_button = tk.Button(self.root, text="Добавить в избранное", command=self.add_to_favorites) self.add_fav_button.grid(row=2, column=0, columnspan=2, pady=5) # Область для отображения избранных self.favorites_label = tk.Label(self.root, text="Избранные пользователи:", font=('Arial', 12, 'bold')) self.favorites_label.grid(row=3, column=0, sticky='w', padx=10) self.favorites_listbox = tk.Listbox(self.root, width=50, height=8, font=('Arial', 12)) self.favorites_listbox.grid(row=4, column=0, columnspan=2, padx=10, pady=10) self.load_favorites_to_listbox() def load_favorites(self): if os.path.exists(FAVORITES_FILE): with open(FAVORITES_FILE, 'r', encoding='utf-8') as f: return json.load(f) return [] def save_favorites(self): with open(FAVORITES_FILE, 'w', encoding='utf-8') as f: json.dump(self.favorites, f, ensure_ascii=False, indent=2) def load_favorites_to_listbox(self): self.favorites_listbox.delete(0, tk.END) for user in self.favorites: self.favorites_listbox.insert(tk.END, user['login']) def search_user(self): username = self.search_entry.get().strip() if not username: messagebox.showerror("Ошибка", "Поле поиска не должно быть пустым") return url = f'https://api.github.com/users/{username}' response = requests.get(url) if response.status_code == 200: user_data = response.json() display_text = f"{user_data['login']} - {user_data.get('name', 'Нет имени')}" self.results_list.delete(0, tk.END) self.results_list.insert(tk.END, display_text) # сохраняем полный объект для добавления в избранное self.results_list.user_data = user_data else: messagebox.showerror("Ошибка", f"Пользователь '{username}' не найден.") self.results_list.delete(0, tk.END) def add_to_favorites(self): if hasattr(self.results_list, 'user_data'): user = self.results_list.user_data if user['login'] not in [u['login'] for u in self.favorites]: self.favorites.append(user) self.save_favorites() self.load_favorites_to_listbox() else: messagebox.showinfo("Информация", "Пользователь уже в избранном.") else: messagebox.showerror("Ошибка", "Сначала выполните поиск пользователя.") if __name__ == "__main__": root = tk.Tk() app = GitHubUserFinder(root) root.mainloop()