Исходный код cerebro.gui

# -*- coding: utf-8 -*-
"""
Модуль cerebro.gui предоставляет доступ к простым графическим интерфейсам,
таким как диалоги ввода, выбора файлов, индикатор прогресса и т.д.

.. rubric:: Функции

* :py:func:`critical_box() <cerebro.gui.critical_box>`
* :py:func:`get_existing_directory() <cerebro.gui.get_existing_directory>`
* :py:func:`get_open_file_name() <cerebro.gui.get_open_file_name>`
* :py:func:`get_open_file_names() <cerebro.gui.get_open_file_names>`
* :py:func:`get_save_file_name() <cerebro.gui.get_save_file_name>`
* :py:func:`information_box() <cerebro.gui.information_box>`
* :py:func:`message_editor() <cerebro.gui.message_editor>`
* :py:func:`question_box() <cerebro.gui.question_box>`
* :py:func:`warning_box() <cerebro.gui.warning_box>`

.. rubric:: Классы

* :py:class:`AccountDialog <cerebro.gui.AccountDialog>`
* :py:class:`InputDialog <cerebro.gui.InputDialog>`
* :py:class:`ProgressBox <cerebro.gui.ProgressBox>`

"""

import py_cerebro_gui


[документация]def get_existing_directory(title): """ :param string title: заголовок диалога выбора. :returns: путь до выбранной директории. :rtype: string Показывает пользователю диалог выбора директории и возвращает выбранную. Если пользователь отменил выбор, возвратиться None. :: dir = cerebro.gui.get_existing_directory('Выберите директорию') if dir != None: print('Выбранная директория', dir) """ return py_cerebro_gui.get_existing_directory(title)
[документация]def get_open_file_name(title, filter = ''): """ :param string title: заголовок диалога выбора. :param string filter: фильтр файлов по типу, например ``'*.txt'``. Если вы хотите использовать несколько фильтров, разделяйте их ';;', например:: 'Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)' :returns: путь до выбранного файла. :rtype: string Показывает пользователю диалог выбора файла и возвращает выбранный. Если пользователь отменил выбор, возвратиться None. :: file = cerebro.gui.get_open_file_name('Выберите файл', '*.txt') if file != None: print('Выбранный файл', file) .. seealso:: :py:func:`get_open_file_names() <cerebro.gui.get_open_file_names>`. """ return py_cerebro_gui.get_open_file_name(title, filter)
[документация]def get_open_file_names(title, filter = ''): """ :param string title: заголовок диалога выбора. :param string filter: фильтр файлов по типу, например ``'*.txt'``. Если вы хотите использовать несколько фильтров, разделяйте их ';;', например:: 'Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)' :returns: список путей до выбранных файлов. :rtype: list(string,) Показывает пользователю диалог выбора одного и более файлов и возвращает выбранные. Если пользователь отменил выбор, возвратиться None. :: files = cerebro.gui.get_open_file_names('Выберите файлы', '*.txt') if files != None: print('Выбранные файлы', files) .. seealso:: :py:func:`get_open_file_name() <cerebro.gui.get_open_file_name>`. """ return py_cerebro_gui.get_open_file_names(title, filter)
[документация]def get_save_file_name(title, suffix, filename = ''): """ :param string title: заголовок диалога выбора. :param string suffix: суффикс(расширение) файла. :param string filename: имя файла по умолчанию. :returns: путь до выбранного файла. :rtype: string Показывает пользователю диалог выбора файла для сохранения и возвращает выбранный. Если пользователь отменил выбор, возвратиться None. :: file = cerebro.gui.get_save_file_name('Сохранить файл', 'txt') if file != None: print('Файл для сохранения', file) """ return py_cerebro_gui.get_save_file_name(title, suffix, filename)
[документация]def critical_box(title, text): """ :param string title: заголовок окна. :param string text: текст сообщения. Показывает пользователю окно c ошибкой. .. image:: ../img/capi_gui_error.png :align: center """ py_cerebro_gui.critical_box(title, text)
[документация]def information_box(title, text): """ :param string title: заголовок окна. :param string text: текст сообщения. Показывает пользователю окно c информацией. """ py_cerebro_gui.information_box(title, text)
[документация]def question_box(title, text): """ :param string title: заголовок окна. :param string text: текст вопроса. :returns: True, если пользователь нажал кнопку "Да". :rtype: bool Показывает пользователю диалог с вопросом. .. image:: ../img/capi_gui_question.png :align: center """ return py_cerebro_gui.question_box(title, text) != 0
[документация]def warning_box(title, text): """ :param string title: заголовок окна. :param string text: текст сообщения. Показывает пользователю окно с предупреждением. """ py_cerebro_gui.warning_box(title, text)
[документация]def message_editor(type, task_id, parent_message_id = None, html_text = None, attachments = None, attachment_as_links = None, work_time = None, status_id = None, client_visible = None): """ :param int type: :py:const:`тип сообщения <cerebro.aclasses.AbstractMessage.TYPE_>`. :param int task_id: идентификатор задачи, к которой будет добавлено сообщение. :param int parent_message_id: идентификатор родительского сообщения, то есть сообщения на которое это сообщение является ответом. :param string html_text: текст сообщения в формате html. Текст может быть и без форматирования. :param list(string,) attachments: список файлов, которые будут приложены к сообщению. :param list(string,) attachment_as_links: список файлов, которые будут добавлены к сообщению как сссылки. :param float work_time: время в минутах. :param int status_id: идентификатор статуса задачи, в который перейдет задача после отправки сообщения. :param bool client_visible: Если равен True, сообщение устанавливается как видимое для клиентов. Открывает стандартное неблокирующее окно редактора сообщения для последующей отправки нового сообщения к задаче. Все аргументы, кроме типа сообщения и идентификатора задачи, необязательны. Если какие-то из параметров сообщения не нужно изменять, передавайте вместо нех None. Файлы или линки на файлы в списках attachments и attachment_as_links должны иметь полный путь. Чтобы задать статус задачи в 'Нет статуса', передайте арнумент status_id равный 0. Аргумент work_time имеет смысл задавать только для отчетов или рецензий. Если тип сообщения :py:const:`"Отчет" <cerebro.aclasses.AbstractMessage.TYPE_REPORT>` или :py:const:`"Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`, рабочее время означает заявленное время работы. Если тип сообщения :py:const:`"Рецензия" <cerebro.aclasses.AbstractMessage.TYPE_REVIEW>`, рабочее время означает принятое время работы за предыдущий отчет. :: current_task = cerebro.core.current_task() cerebro.gui.message_editor(cerebro.aclasses.AbstractMessage.TYPE_NOTE, current_task.id(), None, 'Test') """ if html_text == None: html_text = '' if parent_message_id == None: parent_message_id = -2 if attachments == None: attachments = [] if attachment_as_links == None: attachment_as_links = [] if work_time == None: work_time = -1 if status_id == None: status_id = -2 if client_visible == None: client_visible = -1 py_cerebro_gui.message_editor(type, task_id, parent_message_id, html_text, attachments, attachment_as_links, work_time, status_id, int(client_visible))
[документация]class ProgressBox(): """ :param string title: заголовок окна прогресса. :param int min: минимальное значение прогресса. :param int max: максимальное значение прогресса. Класс окна индикации прогреса. .. rubric:: Методы * :py:meth:`close() <cerebro.gui.ProgressBox.close>` * :py:meth:`hide_cancel_button() <cerebro.gui.ProgressBox.hide_cancel_button>` * :py:meth:`label() <cerebro.gui.ProgressBox.label>` * :py:meth:`max() <cerebro.gui.ProgressBox.max>` * :py:meth:`min() <cerebro.gui.ProgressBox.min>` * :py:meth:`reset() <cerebro.gui.ProgressBox.reset>` * :py:meth:`set_label() <cerebro.gui.ProgressBox.set_label>` * :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>` * :py:meth:`set_title() <cerebro.gui.ProgressBox.set_title>` * :py:meth:`set_value() <cerebro.gui.ProgressBox.set_value>` * :py:meth:`show() <cerebro.gui.ProgressBox.show>` * :py:meth:`title() <cerebro.gui.ProgressBox.title>` * :py:meth:`value() <cerebro.gui.ProgressBox.value>` * :py:meth:`was_canceled() <cerebro.gui.ProgressBox.was_canceled>` .. image:: ../img/capi_gui_progress.png :align: center :: prgbar = cerebro.gui.ProgressBox('Окно прогресса', 0, 100) prgbar.set_label('Прогресс...') prgbar.show() for i in range(0,100): if prgbar.was_canceled() == True: # проверяем, не отменил ли пользователь операцию break prgbar.set_value(i) prgbar.close() """ def __init__(self, title, min = 0, max = 100): self.__id = py_cerebro_gui.progress_bar(title, min, max)
[документация] def set_title(self, title): """ :param string title: заголовок окна. Задает заголовок окна прогресса. .. seealso:: :py:meth:`title() <cerebro.gui.ProgressBox.title>`. """ py_cerebro_gui.progress_bar_set_title(self.__id, title)
[документация] def title(self): """ :returns: заголовок окна прогресса. :rtype: string .. seealso:: :py:meth:`set_title() <cerebro.gui.ProgressBox.set_title>`. """ return py_cerebro_gui.progress_bar_title(self.__id)
[документация] def set_label(self, label): """ :param string label: текстовая метка. Задает текстовую метку. .. seealso:: :py:meth:`label() <cerebro.gui.ProgressBox.label>`. """ py_cerebro_gui.progress_bar_set_label(self.__id, label)
[документация] def label(self): """ :returns: текстовая метка. :rtype: string .. seealso:: :py:meth:`set_label() <cerebro.gui.ProgressBox.set_label>`. """ return py_cerebro_gui.progress_bar_label(self.__id)
[документация] def set_value(self, value): """ :param int value: значение прогресса. Устанавливает значение прогресса. .. seealso:: :py:meth:`value() <cerebro.gui.ProgressBox.value>`. """ py_cerebro_gui.progress_bar_set_value(self.__id, value)
[документация] def value(self): """ :returns: значение прогресса. :rtype: int .. seealso:: :py:meth:`set_value() <cerebro.gui.ProgressBox.set_value>`. """ return py_cerebro_gui.progress_bar_value(self.__id)
[документация] def set_range(self, min, max): """ :param int min: минималное значение прогресса. :param int max: максимальное значение прогресса. Устанавливает минималное и максимальное значения прогресса. .. seealso:: :py:meth:`max() <cerebro.gui.ProgressBox.max>`, :py:meth:`min() <cerebro.gui.ProgressBox.min>`. """ py_cerebro_gui.progress_bar_set_range(self.__id, min, max)
[документация] def min(self): """ :returns: минимальное значение прогресса. :rtype: int .. seealso:: :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>`. """ return py_cerebro_gui.progress_bar_min(self.__id)
[документация] def max(self): """ :returns: максимальное значение прогресса. :rtype: int .. seealso:: :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>`. """ return py_cerebro_gui.progress_bar_max(self.__id)
[документация] def reset(self): """ Сбрасывает значение прогресса в минимальное значение. """ py_cerebro_gui.progress_bar_reset(self.__id)
[документация] def show(self): """ Показывыает окно прогресса. .. seealso:: :py:meth:`close() <cerebro.gui.ProgressBox.close>`. """ py_cerebro_gui.progress_bar_show(self.__id)
[документация] def close(self): """ Закрывает окно прогресса. .. seealso:: :py:meth:`show() <cerebro.gui.ProgressBox.show>`. """ py_cerebro_gui.progress_bar_close(self.__id)
[документация] def hide_cancel_button(self): """ Скрывает кнопку отмены. Если вы не хотите давать пользователю возможность отменить операцию, вызовите этот метод. Если вы оставляете возможность отмены пользователю, вам следует обрабатывать метод :py:meth:`was_canceled() <cerebro.gui.ProgressBox.was_canceled>` для того, чтобы узнать о нажатии пользователем кнопки отмены. """ py_cerebro_gui.progress_bar_hide_cancel(self.__id)
[документация] def was_canceled(self): """ :returns: True, если пользователь нажал кнопку отмены. :rtype: bool """ return py_cerebro_gui.progress_bar_was_canceled(self.__id) != 0
[документация]class AccountDialog(): """ :param string title: заголовок диалога. :param string label: текстовая метка. :param string store_key: ключ для восстановления раннее сохраненного логина и пароля. Класс диалога ввода логина и пароля. .. rubric:: Методы * :py:meth:`execute() <cerebro.gui.AccountDialog.execute>` * :py:meth:`login() <cerebro.gui.AccountDialog.login>` * :py:meth:`password() <cerebro.gui.AccountDialog.password>` * :py:meth:`set_login() <cerebro.gui.AccountDialog.set_login>` * :py:meth:`store() <cerebro.gui.AccountDialog.store>` .. image:: ../img/capi_gui_account.png :align: center :: daccount = cerebro.gui.account_dialog('Пример', 'Введите ваш логин и пароль', 'store_key') res = daccount.execute() if res == True: print('Введенные пользователем логин и пароль', daccount.login(), daccount.password()) daccount.store('store_key') # сохраняем пароль для последующих вызовов """ def __init__(self, title, label = '', store_key = ''): self.__id = py_cerebro_gui.daccount(title, label, store_key)
[документация] def set_login(self, login): """ :param string login: логин. Устанавливает значение логина. .. seealso:: :py:meth:`login() <cerebro.gui.AccountDialog.login>`. """ py_cerebro_gui.daccount_set_login(self.__id, login)
[документация] def execute(self): """ :returns: True, если пользователь ввел логин и пароль и нажал кнопку Ok, либо логин и пароль были сохранены ранее. :rtype: bool Показывает диалог пользователю. Если логин и пароль были сохранены при прошлом вызове, диалог не будет показан, вернётся значение True и далее вы можете получить логин и пароль воспользовавшись методами :py:meth:`login() <cerebro.gui.AccountDialog.login>` и :py:meth:`password() <cerebro.gui.AccountDialog.password>`. """ return py_cerebro_gui.daccount_exec(self.__id) != 0
[документация] def login(self): """ :returns: введенный пользователем логин. :rtype: string .. seealso:: :py:meth:`set_login() <cerebro.gui.AccountDialog.set_login>`. """ return py_cerebro_gui.daccount_login(self.__id)
[документация] def password(self): """ :returns: введенный пользователем пароль. :rtype: string """ return py_cerebro_gui.daccount_pass(self.__id)
[документация] def store(self, store_key, expires = 7): # сохраняется по ключу на текущего пользователя, если -1 - навсегда """ :param string store_key: ключ для сохранения логина и пароля. :param int expires: срок хранения пароля в днях. Установка этого аргумента в -1 будет означать сохранение пароля навсегда. Диалог позволяет сохранять логин и пароль на определенное вами время по текстовому ключу. Для восстановления раннее сохраненного палоля передайте в конструктор диалога тот же ключ, что и при сохранении. .. note:: Все пароли сохраняются в зашифрованном виде. """ py_cerebro_gui.daccount_save(self.__id, store_key, expires)
[документация]class InputDialog(): """ :param int type: :py:const:`тип вводимого значения <cerebro.gui.InputDialog.TYPE_>`. :param string title: заголовок диалога. :param string label: текстовая метка. :param string store_key: ключ для восстановления последнего введенного значения. Класс диалога ввода. .. rubric:: Методы * :py:meth:`display_format() <cerebro.gui.InputDialog.display_format>` * :py:meth:`execute() <cerebro.gui.InputDialog.execute>` * :py:meth:`items() <cerebro.gui.InputDialog.items>` * :py:meth:`max() <cerebro.gui.InputDialog.max>` * :py:meth:`min() <cerebro.gui.InputDialog.min>` * :py:meth:`set_display_format() <cerebro.gui.InputDialog.set_display_format>` * :py:meth:`set_items() <cerebro.gui.InputDialog.set_items>` * :py:meth:`set_range() <cerebro.gui.InputDialog.set_range>` * :py:meth:`set_value() <cerebro.gui.InputDialog.set_value>` * :py:meth:`type() <cerebro.gui.InputDialog.type>` * :py:meth:`value() <cerebro.gui.InputDialog.value>` .. image:: ../img/capi_gui_input.png :align: center :: dinput = cerebro.gui.input_dialog(cerebro.gui.InputDialog.TYPE_INT, 'Пример ввода', 'Введите') dinput.set_range(-100, 100) dinput.set_value(10) res = dinput.execute() if res == True: print('Введенное пользователем значение', dinput.value()) """ TYPE_ = '' """ .. rubric:: Типы вводимых значений """ TYPE_STRING = 0 """Строка. Тип string.""" TYPE_INT = 1 """Целое число. Тип int.""" TYPE_FLOAT = 2 """Вещественное число. Тип float.""" TYPE_DATETIME = 3 """Дата и время. Тип datetime.""" TYPE_COMBOBOX = 4 """Выбор значения из :py:meth:`заранее заданного списка <cerebro.gui.InputDialog.set_items>`. Тип string.""" def __init__(self, type, title, label = '', storeKey = ''): self.__id = py_cerebro_gui.dinput(type, title, label, storeKey) self.__type = type self.__storeKey = storeKey
[документация] def set_value(self, val): """ :param val: значение по умолчанию. Устанавливает значение в диалоге ввода. Тип входного аргумента определяется :py:const:`типом диалога ввода <cerebro.gui.InputDialog.TYPE_>`. .. seealso:: :py:meth:`value() <cerebro.gui.InputDialog.value>`. """ if self.__type == InputDialog.TYPE_STRING: py_cerebro_gui.dinput_set_value_s(self.__id, val) elif self.__type == InputDialog.TYPE_INT: py_cerebro_gui.dinput_set_value_i(self.__id, val) elif self.__type == InputDialog.TYPE_FLOAT: py_cerebro_gui.dinput_set_value_d(self.__id, val) elif self.__type == InputDialog.TYPE_DATETIME: py_cerebro_gui.dinput_set_value_t(self.__id, val.strftime('%Y-%m-%dT%H:%M:%S')) elif self.__type == InputDialog.TYPE_COMBOBOX: py_cerebro_gui.dinput_set_value_c(self.__id, val)
[документация] def execute(self): """ :returns: значение True, если пользователь ввел значение и нажал кнопку Ok. :rtype: bool Показывает диалог пользователю. """ return py_cerebro_gui.dinput_exec(self.__id) != 0
[документация] def value(self): """ :returns: введенное пользователем значение. Тип возвращаемого значения определяется :py:const:`типом диалога ввода <cerebro.gui.InputDialog.TYPE_>`. .. seealso:: :py:meth:`set_value() <cerebro.gui.InputDialog.set_value>`. """ return py_cerebro_gui.dinput_value(self.__id, self.__storeKey)
[документация] def type(self): """ :returns: :py:const:`тип вводимого значения <cerebro.gui.InputDialog.TYPE_>`. :rtype: int """ return self.__type
[документация] def set_items(self, items): """ :param list(string,) items: список для выбора значения. Устанавливает список для выбора значения. Применяется только для типа :py:const:`cerebro.gui.InputDialog.TYPE_COMBOBOX`. .. seealso:: :py:meth:`items() <cerebro.gui.InputDialog.items>`. """ if self.__type == InputDialog.TYPE_COMBOBOX: py_cerebro_gui.dinput_set_items(self.__id, items) else: print(self.__type, ' type do not have list')
[документация] def items(self): """ :returns: список для выбора значения. :rtype: list(string,) Применяется только для типа :py:const:`cerebro.gui.InputDialog.TYPE_COMBOBOX`. .. seealso:: :py:meth:`set_items() <cerebro.gui.InputDialog.set_items>`. """ if self.__type == InputDialog.TYPE_COMBOBOX: return py_cerebro_gui.dinput_items(self.__id) else: print(self.__type, ' type do not have list') return list()
[документация] def set_range(self, min, max): """ :param min: минималное значение для ввода. :param max: максимальное значение для ввода. Устанавливает минимальное и максимальное значения для ввода. Применяется только для типов :py:const:`cerebro.gui.InputDialog.TYPE_FLOAT` и :py:const:`cerebro.gui.InputDialog.TYPE_INT` .. seealso:: :py:meth:`max() <cerebro.gui.InputDialog.max>`, :py:meth:`min() <cerebro.gui.InputDialog.min>`. """ if self.__type == InputDialog.TYPE_FLOAT or self.__type == InputDialog.TYPE_INT: py_cerebro_gui.dinput_set_range(self.__id, min, max) else: print(self.__type, ' type do not have range')
[документация] def min(self): """ :returns: минимальное значение для ввода. Применяется только для типов :py:const:`cerebro.gui.InputDialog.TYPE_FLOAT` и :py:const:`cerebro.gui.InputDialog.TYPE_INT` .. seealso:: :py:meth:`set_range() <cerebro.gui.InputDialog.set_range>`. """ if self.__type == InputDialog.TYPE_FLOAT or self.__type == InputDialog.TYPE_INT: return py_cerebro_gui.dinput_min(self.__id) else: print(self.__type, ' type do not have range')
[документация] def max(self): """ :returns: максимальное значение для ввода. Применяется только для типов :py:const:`cerebro.gui.InputDialog.TYPE_FLOAT` и :py:const:`cerebro.gui.InputDialog.TYPE_INT` .. seealso:: :py:meth:`set_range() <cerebro.gui.InputDialog.set_range>`. """ if self.__type == InputDialog.TYPE_FLOAT or self.__type == InputDialog.TYPE_INT: return py_cerebro_gui.dinput_max(self.__id) else: print(self.__type, ' type do not have range')
[документация] def set_display_format(self, format): """ :param string format: формат, используемый для отображения даты и времени. Устанавливает формат отображения даты и времени в строковом виде. Пример:: dinput.set_display_format('yyyy.MM.dd hh:mm") # for example: 2014.01.01 13:09 Применяется только для типа :py:const:`cerebro.gui.InputDialog.TYPE_DATETIME` .. seealso:: :py:meth:`display_format() <cerebro.gui.InputDialog.display_format>`. """ if self.__type == InputDialog.TYPE_DATETIME: py_cerebro_gui.dinput_set_display_format(self.__id, format) else: print(self.__type, ' type do not have display format')
[документация] def display_format(self): """ :returns: формат, используемый для отображения даты и времени. Применяется только для типа :py:const:`cerebro.gui.InputDialog.TYPE_DATETIME` .. seealso:: :py:meth:`set_display_format() <cerebro.gui.InputDialog.set_display_format>`. """ if self.__type == InputDialog.TYPE_DATETIME: return py_cerebro_gui.dinput_display_format(self.__id) else: print(self.__type, ' type do not have display format')