Ejemplo n.º 1
0
 def show_info(self, item):
     container = Frame(self.info)
     container.pack(expand=1, fill=BOTH)
     header = Frame(container)
     header.pack(fill=X, expand=1, anchor=N)
     Label(header,
           text=f'{item.name} параметры',
           font=('Times New Roman', 15, 'bold')).pack(side=LEFT)
     Button(header,
            text='Удалить вещь',
            command=lambda i=item: self.delete_item(i)).pack(side=RIGHT,
                                                             padx=10,
                                                             pady=10)
     if isinstance(item, Inventory):
         Button(header,
                text='Открыть...',
                command=lambda: InventoryWindow(
                    self, item, f'Вложение {item.name}')).pack(expand=1,
                                                               fill=BOTH)
         Database.save(DATABASE)
         return container
     Button(
         header,
         text='Изменить кол-во',
         command=lambda i=item: self.create_change_quantify_window(i)).pack(
             side=RIGHT, pady=10)
     params_frame = Frame(container)
     params_frame.pack(expand=1, fill=BOTH)
     self.display_row(params_frame, 'Вес', item.weight, 0)
     for n, parameter in enumerate(item.stats):
         self.display_row(params_frame, parameter, item.stats[parameter],
                          n + 1)
     return container
Ejemplo n.º 2
0
 def delete_achievement(self, ach: Achievement):
     if askyesno('Подтвердите действие',
                 'Вы действительно хотите удалить это достижение?'):
         self.profile.achievements.remove(ach)
         self.existing_achieves.pop(ach.name).destroy()
         Database.save(DATABASE)
         self.update_achieves()
Ejemplo n.º 3
0
 def delete_item(self, item: Item):
     if askyesno('Подтвердите',
                 'Вы действительно хотите удалить эту вещь?'):
         self.profile_items.inventory.pop(item.name)
         self.active.destroy()
         self.active = None
         Database.save(DATABASE)
         self.update_listbox()
Ejemplo n.º 4
0
 def delete_profile(self, window, profile):
     if askyesno('Подтвердите действие',
                 f'Вы дейтвительно хотите удалить профиль {profile.name}?'):
         window.destroy()
         DATABASE['profiles'].remove(profile)
         self.profile_name_buttons.pop(profile.name).destroy()
         Database.save(DATABASE)
         showinfo('Готово!', f'Профиль: {profile.name} был успешно удален!')
Ejemplo n.º 5
0
 def add_achieve(self):
     ask_achieve_window = AskWindowSample(self, 'Новое достижение',
                                          (500, 600), [], 2)
     ask_achieve_window.create_entry_parameter_field('Название', str)
     ask_achieve_window.create_text_parameter_field('Описание')
     ask_achieve_window.wait_window()
     result = ask_achieve_window.result
     if self.check_box(ask_achieve_window.result):
         self.profile.add_achieve(
             Achievement(result['Название'], result['Описание']))
         Database.save(DATABASE)
         self.update_achieves()
Ejemplo n.º 6
0
 def create_profile(self, name):
     add_profile_window = AskWindowSample(self, 'Новый профиль', (400, 700),
                                          ['Name'], 90)
     add_profile_window.create_entry_parameter_field('Объем', int)
     add_profile_window.wait_window()
     for field in add_profile_window.result:
         if not add_profile_window.result[field]:
             return
     inv = Inventory('root', int(add_profile_window.result.pop('Объем')))
     p = Profile(name.title(), inv, **add_profile_window.result)
     profile_names.append(name)
     DATABASE['profiles'].append(p)
     Database.save(DATABASE)
     self.refresh_profile_buttons()
Ejemplo n.º 7
0
 def give_award(self, quest):
     if quest.award and quest.status:
         for item in quest.award:
             if self.profile.inventory.weight_access_check(
                     quest.award[item]['instance'], 1):
                 self.profile.inventory.put(quest.award[item]['instance'])
             else:
                 showerror(
                     'Error',
                     f'{item} слишком велик по размеру и не помещается в ваш инвентарь'
                 )
         quest.status = 0
         Database.save(DATABASE)
     else:
         showinfo('Инфо', 'Наград нет или они уже были получены раньше')
Ejemplo n.º 8
0
    def add_item_request(self):
        add_item_list_window = ItemSelectionWindow(self, 'Выберите вещи',
                                                   DATABASE['items'])
        add_item_list_window.wait_window()

        if add_item_list_window.selected_items:
            for item_key in add_item_list_window.selected_items:
                item = DATABASE['items'].inventory[item_key]['instance']
                if not self.profile_items.weight_access_check(item, 1):
                    break
                elif not self.quantity_check(1, item_key):
                    break
            else:
                self.sort_item_quantify(add_item_list_window.selected_items)
                Database.save(DATABASE)
                self.update_listbox()
Ejemplo n.º 9
0
 def create_new_npc(self):
     add_npc_window = AskWindowSample(self, 'Новый НИП', (500, 500), [])
     add_npc_window.create_entry_parameter_field('Имя', str)
     add_npc_window.create_entry_parameter_field('Раса', str)
     add_npc_window.create_entry_parameter_field('Где обитает', str)
     add_npc_window.create_entry_parameter_field('Чем занимается', str)
     add_npc_window.wait_window()
     if add_npc_window.result['Имя'] and add_npc_window.result['Имя'].title(
     ) in npc_by_names:
         showerror('Ошибка', 'Такой НИП уже существует')
         return
     result = add_npc_window.result
     if self.check_box(result):
         npc = NotPlayerCharacter(result['Имя'], result['Раса'],
                                  result['Где обитает'],
                                  result['Чем занимается'])
         DATABASE['npcs'].append(npc)
         npc_by_names[npc.name] = npc
         Database.save(DATABASE)
     self.fill_npc_list()
Ejemplo n.º 10
0
 def add_quest(self):
     add_quest_window = AskWindowSample(self, 'Новый квест', (500, 700), [],
                                        4)
     add_quest_window.create_entry_parameter_field('Название', str)
     add_quest_window.create_text_parameter_field('Описание')
     add_quest_window.create_combobox_parameter_field(
         'Получен от', [x.name for x in DATABASE['npcs']])
     add_quest_window.create_item_parameter_field('Награда',
                                                  DATABASE['items'])
     add_quest_window.wait_window()
     result = add_quest_window.result
     try:
         parent = npc_by_names[result['Получен от']]
     except KeyError:
         showerror('Ошибка', 'Неверный НИП')
         return
     for key in result:
         if not result[key]:
             return 0
     q = Quest(result['Описание'], parent, result['Награда'],
               result['Название'].title())
     self.profile.quests.append(q)
     Database.save(DATABASE)
     self.post_quests()
Ejemplo n.º 11
0
 def create_all_items_window(self):
     w = ItemsList(self, 'Все вещи', (800, 600),
                   DATABASE['items'].inventory, True, DATABASE['items'])
     w.wait_window()
     Database.save(DATABASE)
Ejemplo n.º 12
0
 def delete(self, character):
     self.buttons.pop(character.name).destroy()
     DATABASE['npcs'].remove(character)
     npc_by_names.pop(character.name)
     Database.save(DATABASE)
Ejemplo n.º 13
0
 def save_notes(self):
     self.item.notes = self.t.get('1.0', END + '-1c')
     Database.save(DATABASE)
Ejemplo n.º 14
0
 def update_quantity_number(self, txt, k):
     txt.config(
         text=
         f'Текущее кол-во: {self.profile_items.inventory[k]["quantify"]}')
     Database.save(DATABASE)
Ejemplo n.º 15
0
 def delete_quest_frame(self, quest):
     if askyesno('Подтвердите действие',
                 'Вы действительно хотите удалить этот квест?'):
         self.profile.quests.remove(quest)
         Database.save(DATABASE)
         self.existing_quests.pop(quest).destroy()
Ejemplo n.º 16
0
from tkinter import *
from tkinter.messagebox import *
from pickle_tools import Database
from structures import *
from creation_abstract_class import AskWindowSample
from abstract_display_window import DisplayWindow
from abstract_itemlist_window import ItemsList
from abstract_window import AbstractWindow
from item_seletion_window import ItemSelectionWindow

DATABASE = Database.load()
profile_names = [x.name for x in DATABASE['profiles']]
npc_by_names = {x.name: x for x in DATABASE['npcs']}


# --------------------------------------------------------
class MainWindow(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.title('BackPack by wonder [v.0.0.2]')
        self.geometry('800x600')
        self.maxsize(1000, 600)
        self.profile_name_buttons = dict()

        canvas = Canvas(self, width=650)
        sbar = Scrollbar(self, command=canvas.yview)
        self.core_bar = Frame(self)
        self.core_bar.bind(
            '<Configure>',
            lambda event: canvas.config(scrollregion=canvas.bbox('all')))
        canvas.create_window((0, 0), window=self.core_bar)