Untitled
unknown
python
a year ago
8.9 kB
3
Indexable
# Импортировать модуль json для работы с данными в формате JSON import json # Определить классы для представления объектов из файлов class AnubisConfig: def __init__(self, AnubisConfigName, GUID, AnubisConfigType, AnubisConfigData): self.AnubisConfigName = AnubisConfigName self.GUID = GUID self.AnubisConfigType = AnubisConfigType self.AnubisConfigData = AnubisConfigData # Написать функцию для чтения файла и преобразования его содержимого в список объектов класса AnubisConfig def read_file(filename): with open(filename, "r") as f: data = json.load(f) # Преобразовать JSON-строку в словарь Python objects = [] # Создать пустой список для хранения объектов for item in data: # Перебрать словарь по ключам # Создать объект класса AnubisConfig с помощью конструктора и добавить его в список objects.append(AnubisConfig(item, data[item]["GUID"], data[item]["AnubisConfigType"], data[item]["AnubisConfigData"])) return objects # Вернуть список объектов # Написать функцию для записи списка объектов класса AnubisConfig в файл в формате JSON def write_file(objects, filename): with open(filename, "w") as f: data = {} # Создать пустой словарь для хранения данных for obj in objects: # Перебрать список объектов # Преобразовать объект в словарь и добавить его в общий словарь по ключу AnubisConfigName data[obj.AnubisConfigName] = {"GUID": obj.GUID, "AnubisConfigType": obj.AnubisConfigType, "AnubisConfigData": obj.AnubisConfigData} json.dump(data, f) # Преобразовать словарь в JSON-строку и записать ее в файл # Импортировать модуль wxPython для создания графического интерфейса на Python import wx # Создать главное окно приложения с помощью класса wx.Frame app = wx.App() # Создать объект приложения frame = wx.Frame(None, title="Anubis Config Editor", size=(800, 600)) # Создать объект окна с заголовком и размером # Добавить элементы управления в окно panel = wx.Panel(frame) # Создать панель для размещения элементов управления open_button = wx.Button(panel, label="Open") # Создать кнопку для открытия файла create_button = wx.Button(panel, label="Create") # Создать кнопку для создания нового объекта export_button = wx.Button(panel, label="Export") # Создать кнопку для экспорта списка объектов в файл object_list = wx.ListBox(panel) # Создать список для отображения объектов из файла object_name = wx.TextCtrl(panel) # Создать текстовое поле для отображения или изменения имени объекта object_guid = wx.TextCtrl(panel) # Создать текстовое поле для отображения или изменения GUID объекта object_type = wx.TextCtrl(panel) # Создать текстовое поле для отображения или изменения типа объекта object_data = wx.TextCtrl(panel, style=wx.TE_MULTILINE) # Создать текстовое поле для отображения или изменения данных объекта # Расположить элементы управления на панели с помощью сетки из 4 строк и 2 столбцов sizer = wx.GridBagSizer(4, 2) # Создать объект сетки с заданным количеством строк и столбцов sizer.Add(open_button, (0, 0), flag=wx.EXPAND) # Добавить кнопку открытия в ячейку (0, 0) и растянуть ее по горизонтали sizer.Add(create_button, (0, 1), flag=wx.EXPAND) # Добавить кнопку создания в ячейку (0, 1) и растянуть ее по горизонтали sizer.Add(export_button, (1, 0), flag=wx.EXPAND) # Добавить кнопку экспорта в ячейку (1, 0) и растянуть ее по горизонтали sizer.Add(object_list, (1, 1), (3, 1), flag=wx.EXPAND) # Добавить список объектов в ячейку (1, 1) и растянуть ее по вертикали и горизонтали sizer.Add(object_name, (2, 0), flag=wx.EXPAND) # Добавить текстовое поле имени в ячейку (2, 0) и растянуть ее по горизонтали sizer.Add(object_guid, (3, 0), flag=wx.EXPAND) # Добавить текстовое поле GUID в ячейку (3, 0) и растянуть ее по горизонтали sizer.Add(object_type, (4, 0), flag=wx.EXPAND) # Добавить текстовое поле типа в ячейку (4, 0) и растянуть ее по горизонтали sizer.Add(object_data, (5, 0), (1, 2), flag=wx.EXPAND) # Добавить текстовое поле данных в ячейку (5, 0) и растянуть ее по вертикали и горизонтали panel.SetSizer(sizer) # Установить сетку как менеджер размещения для панели # Привязать события к элементам управления open_button.Bind(wx.EVT_BUTTON, lambda event: open_file(event)) # Привязать событие нажатия кнопки открытия к функции open_file create_button.Bind(wx.EVT_BUTTON, lambda event: create_object(event)) # Привязать событие нажатия кнопки создания к функции create_object export_button.Bind(wx.EVT_BUTTON, lambda event: export_file(event)) # Привязать событие нажатия кнопки экспорта к функции export_file object_list.Bind(wx.EVT_LISTBOX, lambda event: show_object(event)) # Привязать событие выбора элемента из списка к функции show_object # Написать логику приложения # Создать пустой список для хранения объектов из файла objects = [] # Определить функцию для открытия файла и заполнения списка объектов def open_file(event): global objects # Объявить переменную objects как глобальную file_dialog = wx.FileDialog(frame, "Choose a file", "", "", "JSON files (*.json)|*.json", wx.FD_OPEN) # Создать диалог выбора файла с фильтром по расширению .json if file_dialog.ShowModal() == wx.ID_OK: # Если пользователь выбрал файл и нажал OK filename = file_dialog.GetPath() # Получить путь к выбранному файлу objects = read_file(filename) # Вызвать функцию чтения файла и присвоить результат переменной objects object_list.Clear() # Очистить список объектов на интерфейсе for obj in objects: # Перебрать список объектов object_list.Append(obj.AnubisConfigName) # Добавить имя каждого объекта в список на интерфейсе # Определить функцию для создания нового объекта с автоматически сгенерированным GUID и заданными значениями полей def create_object(event): global objects # Объявить переменную objects как глобальную name = object_name.GetValue() # Получить значение из текстового поля имени guid = wx.NewId() # Сгенерировать новый GUID с помощью метода wx.NewId() type = object_type.GetValue() # Получить значение из текстового поля типа data = object_data.GetValue() # Получить значение из текстового поля данных new_object = AnubisConfig(name,
Editor is loading...