Open main menu

Gramps β

Changes

Учебник по написанию отчетов

1,163 bytes removed, 12:15, 2 December 2025
Реализация: Russian translation has been aligned with English text
==Реализация==
===Определение класса параметров отчета===
В нашем примере специальные параметры для этом учебнике у отчета не требуютсяесть два параметра. Это делает класс параметров отчета очень простым. Требуется только определить значения по умолчанию для настраиваемых пользователем стилей.Первый, <code>what_types<pre/code>from gramps.gen.plug.report import Reportfrom gramps.gen.plug.report import ReportOptionsfrom gramps.gen.lib import Personfrom gramps.gen.plug import docgenfrom gramps.gen.const import GRAMPS_LOCALE as glocale_ = glocale.translation.gettext  class DbSummaryOptions(ReportOptions):  def __init__(self, nameпозволяет пользователю выбрать будет ли отчет содержать количество Мужчин, database):  ReportOptions.__init__(self, name, database)  def make_default_style(selfЖенщин, default_style):  # Определяем стиль абзаца заголовка отчета 'DBS-Title', который использует # жирный шрифт Sans Serif, кегль 18 пунктов, выравнивание текста - по центру  font = docgen.FontStyle() font.set_size(18) fontЛиц неизвестного пола и Лиц другого пола.set_type_face(docgen.FONT_SANS_SERIF) font.set_bold(True)  para = docgen.ParagraphStyle() para.set_header_level(1) para.set_alignment(docgen.PARA_ALIGN_CENTER) para.set_font(font) para.set_description(_('The style used for the title of the page.'))  default_style.add_paragraph_style('DBSВторой -Title', para)  # Определяем стиль обычного абзаца 'DBS-Normal'это стандартный параметр Gramps, который # использует шрифт Serifпозволяет пользователю задать локализацию отчета, кегль 12 пунктов  font = docgenотличную от локализации пользовательского интерфейса.FontStyle() fontОн добавляется вызовом метода <code>stdoptions.set_sizeadd_localization_option(12) font</code>.set_type_faceЭти два параметра добавляются переопределенным методом <code>add_menu_options(docgen.FONT_SERIF para = docgen.ParagraphStyle() para.set_font(font) para.set_description(_('The style used for normal text'))  default_style.add_paragraph_style('DBS-Normal', para) </precode>.
Чтобы определить два уникальных стиля для отчета, DBS-Title and DBS-Normal, так же переопределяется метод <code>make_default_style()</code>. Оба стиля добавляются вызовом метода <code>default_style.add_paragraph_style()</code>.
{{RWT_ReportOptions.py}}
Теперь создайте файл '''report.py''' и скопируйте в него вышеприведенный код.
===Определение класса отчета===
Фактическая реализация отчета <code>DbSummaryReport</code> довольно проста. Какая-либо дополнительная работа для Для инициализации класса не требуется, так что просто вызваем вызывается родительский метод <code>Report.__init__()</code> базового класса. Вся работа делается в методе а затем из объекта <code>write_report()options_class</code>. Он использует итератор [https://www.gramps-project.org/docs/gen/gen_db.html#gramps.gen.db.generic.DbGeneric.iter_people , который имеет класс <code>self.database.iter_people()DbSummaryOptions</code>] для последовательного перебора всех объектов класса [https://www, извлекаются значения параметров отчета, заданных пользователем.gramps-project.org/docs/gen/gen_lib.html#module-gramps.gen.lib.person Список имен флажков, выбранных пользователем, присваивается переменной объекта <code>Personself.what_types</code>] и сбора некоторой простой статистикиЕдинственная вещь, которая может рассматриваться как некоторое затруднение, это определение наиболее часто встречающейся фамилии. Для подсчета количества использований каждой фамилии используется словарь Питон. Всякий раз, когда некоторая фамилия встречается, счетчик значений для неё в словаре увеличивается. Результаты затем загружаются в список и сортируются, что позволяет нам найти наиболее часто встречающуюся фамилию просто посмотрев в конец списка. Затем вызывается метод <precode>class DbSummaryReport(Report):  def __init__(self, database, options_class, user):  Report.__init__set_locale(self)</code>, databaseкоторому передается выбранная пользователем локализация, options_class, user)  def write_report(self):  males = 0 females = 0 total = 0 surname_map = {}  for person in self.database.iter_people(): if person.get_gender() == Person.MALE: males += 1 if person.get_gender() == Person.FEMALE: females += 1 total += 1  surname = person.get_primary_name().get_surname()  if surname in surname_map: surname_map[surname] += 1 else: surname_map[surname] = 1  slist = [] for key in surname_map.keys(): slist.append((surname_map[key], key)) slist.sort()  self.doc.start_paragraph("DBS-Title") self.doc.write_text(_("Database Summary")) self.doc.end_paragraph()  selfкоторая должна использоваться для запуска отчета.doc.start_paragraph('DBS-Normal') self.doc.write_text(_('Number of males : %d') % males) self.doc.end_paragraph()  self.doc.start_paragraph('DBS-Normal') self.doc.write_text(_('Number of females : %d') % females) self.doc.end_paragraph()  self.doc.start_paragraph('DBS-Normal') self.doc.write_text(_('Total people : %d') % total) self.doc.end_paragraph()
selfВся работа делается в методе <code>_count()</code>.docОн использует итератор [https://www.start_paragraph('DBSgramps-Normal') project.org/docs/gen/gen_db.html#gramps.gen.db.generic.DbGeneric.iter_people <code>self.docdatabase.write_textiter_people(_('Number of unique surnames )</code>] для последовательного перебора всех объектов класса [https: %d') % len(//www.gramps-project.org/docs/gen/gen_lib.html#module-gramps.gen.lib.person <code>Person</code>] и сбора некоторой простой статистики. Единственная вещь, которая может рассматриваться как некоторое затруднение, это определение наиболее часто встречающихся фамилий. Для подсчета количества использования каждой фамилии используется словарь Питон. Всякий раз, когда некоторая фамилия встречается, счетчик значений для неё в словаре увеличивается. Результаты затем загружаются в список и сортируются в обратном порядке <code>slist)) self.doc.end_paragraphsort(reverse=True)</code>, что позволяет нам найти наиболее часто встречающиеся фамилии просто посмотрев в начало списка.
self.doc.start_paragraphВ заключение метод <code>write_report('DBS-Normal') self</code> выводит собранные данные в соответствии с параметрами, выбранными пользователем отчета.docЗаметьте, что строки, которые используются в отчете, (такие как "Report Options", "Males" и др.write_text(_('Most common surname : %s') % (slist[уже используется где-1][1])) self.docто в Gramps и были переведены на другие языки.end_paragraph()Таким образом, содержание нашего отчета и его параметры оказываются уже переведенными!
</pre>{{RWT_Report.py}}
Добавьте код выше в файл '''report.py'''.
64
edits