Skip to content

kredit #4484

@Juliya0811

Description

@Juliya0811

import pandas as pd
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

class Kreditor:
def init(self, root):
self.root = root
self.root.title("Виды кредитования")

    # Ограничения по видам кредита
    self.allowed_credit_types = [
        "Потребительский",
        "Ипотечный",
        "Автокредит",
        "Образовательный",
        "Для малого бизнеса"
    ]

    # Максимальное количество кредитов
    self.max_credits = 10  # Например, ограничение до 10 кредитов

    # Заголовки колонок
    self.columns = [
        ("ID", "id"),
        ("Вид кредита", "vid_kredita"),
        ("Цель кредита", "cel_kredita"),
        ("Сумма кредита", "summa_kredita"),
        ("Срок кредита (мес)", "srok_kredita"),
        ("Процентная ставка (%)", "procentnaya_stavka"),
        ("Обеспечение кредита", "obespeчение_kredita"),
        ("Условия погашения", "usloviya_pogasheniya"),
        ("Банк/Кредитор", "bank_kreditor"),
        ("Примечание", "primechanie")
    ]

    # DataFrame для хранения данных
    self.df = pd.DataFrame(columns=[col[1] for col in self.columns])

    # Treeview для отображения данных
    self.tree = ttk.Treeview(root, columns=[col[1] for col in self.columns], show="headings")

    # Конфигурация колонок
    for col in self.columns:
        self.tree.heading(col[1], text=col[0])
        self.tree.column(col[1], width=100)

    self.tree.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)

    # Кнопки
    self.add_button = tk.Button(root, text="Добавить запись", command=self.add_record)
    self.add_button.pack(pady=5)

    self.edit_button = tk.Button(root, text="Редактировать запись", command=self.edit_record)
    self.edit_button.pack(pady=5)

    self.delete_button = tk.Button(root, text="Удалить запись", command=self.delete_record)
    self.delete_button.pack(pady=5)

    # Заполнение Treeview данными (если они есть в файле, например)
    self.load_data()

def load_data(self):
    try:
        self.df = pd.read_csv("kredity.csv")
        self.update_treeview()
    except FileNotFoundError:
        print("Файл kredity.csv не найден. Создается новый.")
        self.df = pd.DataFrame(columns=[col[1] for col in self.columns])
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при загрузке данных: {e}")

def add_record(self):
    if len(self.df) >= self.max_credits:
        messagebox.showinfo("Внимание", f"Достигнуто максимальное количество кредитов ({self.max_credits}).")
    else:
        AddEditWindow(self, "Добавить запись", None, self.allowed_credit_types) # Передаём список типов

def edit_record(self):
    selected_item = self.tree.selection()
    if not selected_item:
        messagebox.showinfo("Внимание", "Выберите запись для редактирования.")
        return

    item_id = selected_item[0]
    data = self.tree.item(item_id, 'values')
    AddEditWindow(self, "Редактировать запись", item_id, data, self.allowed_credit_types) # Передаём список типов

def delete_record(self):
    selected_item = self.tree.selection()
    if not selected_item:
        messagebox.showinfo("Внимание", "Выберите запись для удаления.")
        return

    item_id = selected_item[0]
    if messagebox.askyesno("Подтверждение", "Вы уверены, что хотите удалить эту запись?"):
        index_to_delete = None
        for i, item in enumerate(self.tree.get_children()):
            if item == item_id:
                index_to_delete = i
                break

        if index_to_delete is not None:
            self.df = self.df.drop(self.df.index[index_to_delete])
            self.df = self.df.reset_index(drop=True)
            self.tree.delete(item_id)
            self.save_data()

def update_treeview(self):
    for item in self.tree.get_children():
        self.tree.delete(item)

    for index, row in self.df.iterrows():
        self.tree.insert("", tk.END, values=list(row))

def save_data(self):
    try:
        self.df.to_csv("kredity.csv", index=False)
        print("Данные успешно сохранены в kredity.csv")
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при сохранении данных: {e}")

class AddEditWindow:
def init(self, parent, title, item_id=None, existing_data=None, allowed_credit_types=None): # Получаем список типов
self.parent = parent
self.title = title
self.item_id = item_id
self.existing_data = existing_data
self.allowed_credit_types = allowed_credit_types # Сохраняем список типов

    self.top = tk.Toplevel(parent.root)
    self.top.title(self.title)

    self.entries = {}
    for i, col in enumerate(parent.columns):
        label_text = col[0]
        field_name = col[1]

        tk.Label(self.top, text=label_text).grid(row=i, column=0, padx=5, pady=5, sticky=tk.W)

        if field_name == "vid_kredita":
            # Combobox для выбора вида кредита
            self.entries[field_name] = ttk.Combobox(self.top, values=self.allowed_credit_types) # Используем Combobox
            self.entries[field_name].grid(row=i, column=1, padx=5, pady=5, sticky=tk.E)

            if self.existing_data:
                self.entries[field_name].set(self.existing_data[i])

        else:
            # Обычное текстовое поле для остальных колонок
            entry = tk.Entry(self.top)
            entry.grid(row=i, column=1, padx=5, pady=5, sticky=tk.E)

            if self.existing_data:
                entry.insert(0, self.existing_data[i])

            self.entries[field_name] = entry

    self.save_button = tk.Button(self.top, text="Сохранить", command=self.save_data)
    self.save_button.grid(row=len(parent.columns), column=0, columnspan=2, pady=10)

def save_data(self):
    new_data = {}
    for field_name, entry in self.entries.items():
         if isinstance(entry, ttk.Combobox):
            new_data[field_name] = entry.get()  # Получаем значение из Combobox
         else:
            new_data[field_name] = entry.get()

    # Валидация вида кредита
    if new_data["vid_kredita"] not in self.allowed_credit_types:
        messagebox.showerror("Ошибка", "Недопустимый вид кредита. Выберите из списка.")
        return

    new_row = pd.Series(new_data)

    if self.item_id is None:
        self.parent.df = self.parent.df.append(new_row, ignore_index=True)

    else:
         index_to_update = None
         for i, item in enumerate(self.parent.tree.get_children()):
            if item == self.item_id:
                index_to_update = i
                break
         if index_to_update is not None:
            self.parent.df.loc[index_to_update] = new_row

    self.parent.update_treeview()
    self.parent.save_data()
    self.top.destroy()

if name == "main":
root = tk.Tk()
kreditor = Kreditor(root)
root.mainloop()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions