Messagebox Python Writer

Автор Ципихович Эндрю, 12 января 2024, 07:18

0 Пользователи и 1 гость просматривают эту тему.

sokol92

Цитата: Ципихович Эндрю от 12 января 2024, 09:56получаю ошибку create_instance is not defined как исправить?
Добавить функцию create_instance из того же источника (см. приложенный файл).
Цитата: economist от 12 января 2024, 15:15Самое простой msgboxв OpenOffice|LibreOffice, какой только можно придумать - это LO Basic и его msgbox.
Ходатайствую за функцию Python Msgbox из "LibreOffice Developer's Guide" (я на нее ссылался в предыдущей теме). По крайней мере, макрос hello_world из приложенного файла (у меня) нареканий не вызывает.

Хотя я уже зарекался высказываться на темы, связанные с Python.  :)
Владимир.

Ципихович Эндрю

Цитата: Ципихович Эндрю от 12 января 2024, 14:34цена вопроса две строки кода
а если пойти далее и сделать msgbox по подобию того, какой выдаёт APSO - где можно скопировать текст сообщения, возможно, цена вопроса сколько строк?
кстати если бы не подсказали - я бы не догадался, что там можно копировать - спасибо

economist

Цитата: sokol92 от 12 января 2024, 20:18зарекался высказываться на темы, связанные с Python.

Зря, полезного от вас на Форуме много, а на стыке интересов, технологий, задач, ЯП-ов - возникаем много полезных эффектов. Программирование = творчество (техническое), и здесь уместна вот такая аналогия:
Многим великим музыкантам, по их признанию, сесть творить помогает "пинок". Услыав чужую крутую вещь - они из чувства "Слабо?" и ли еще какого принимаются сами. Вот так и на Форуме - небольшие примеры кода, кейсы, success-story и вообще примеры что во всем этом огромном софте OpenOffice|LibreOffice можно-таки разобраться - воодушевляют. Так что продолжайте в том же духе. Python не станет макроязыком №1 в OpenOffice|LibreOffice, но он же ведет в другие предметные области, которые, прямо скажем, нависают на человечеством.       
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

Цитата: Ципихович Эндрю от 13 января 2024, 08:50msgbox по подобию того, какой выдаёт APSO - где можно скопировать текст

Текст из почти любых MsgBox (и LO Basic) можно копировать (в Linux так вообще почти всё отовсюду копируется). Если текст msgbox приходится копировать - это можно сделать и программно. В Pyton c помощью либы clipboard или pyautogui одной командой, а в LO Basic - многословнее, есть примеры на Форуме.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

Цитата: economist от 13 января 2024, 12:26в LO Basic - многословнее, есть примеры на Форуме
можно пожалуйста ссылку боюсь в поиске нужно разбираться долго и не факт, что будет в точку, спасибо

Ципихович Эндрю

Цитата: economist от 13 января 2024, 12:26есть примеры на Форуме
поискал всего 11 тем, две из них мои, значит остаются 9 - посмотрел не нашёл))
и я ещё не ориентируюсь как на этом ресурсе мухи от котлет оделять))(Питон от бейсика)

economist

Поиск кода макросов, например, по слову clipboard на Форуме своеобразен: "по всем разделам" и из главной страницы он находит не все. Поэтому заходим в "основные" разделы Basic Calc Writer и ищем там.
Например https://forumooo.ru/index.php?msg=21609   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

там сказано:
Цитата: dndn от 24 июля 2013, 00:57Для экспорта строки в буфер обмена нашел в сети такой код
так речь же о том, как сделать так чтобы была возможность выделить нужное на MsgBox, на MsgBox от Питона, её ведь в MsgBox:
pyautogui.alert(text=txt, title='Сообщение', button='OK')нет, а уже потом экспорт строки в буфер обмена
и у для общей информации у меня НЕ Linux, винда 10х64 - навсякий

mikekaganski

Цитата: Ципихович Эндрю от 13 января 2024, 08:50сделать msgbox по подобию того, какой выдаёт APSO

apso.py:

class DialogBase(object):
    """ Base class for dialog. """
    def __init__(self, ctx):
        self.ctx = ctx
        self.smgr = ctx.getServiceManager()

    def create(self, name, arguments=None):
        """ Create service instance. """
        if arguments:
            return self.smgr.createInstanceWithArgumentsAndContext(
                name, arguments, self.ctx)
        else:
            return self.smgr.createInstanceWithContext(
                name, self.ctx)

class MessageDialog(DialogBase):
    """ Shows message in standard message box. """
    def __init__(self, ctx, parent, **kwds):
        DialogBase.__init__(self, ctx)
        self.parent = parent
        self.args = kwds

    def execute(self):
        args = self.args
        type = args.get("type", MESSAGEBOX)
        buttons = args.get("buttons", 1)
        title = args.get("title", "")
        message = args.get("message", "")
        toolkit = self.parent.getToolkit()
        dialog = toolkit.createMessageBox(
            self.parent, type, buttons, title, message)
        n = dialog.execute()
        dialog.dispose()
        return n

apso_utils.py:

def createUnoService(service, ctx=None, args=None):
    '''
    Instanciate a Uno service.

    @service: name of the service to be instanciated.
    @ctx: the context if required.
    @args: the arguments when needed.
    '''
    if not ctx:
        ctx = uno.getComponentContext()
    smgr = ctx.getServiceManager()
    if ctx and args:
        return smgr.createInstanceWithArgumentsAndContext(service, args, ctx)
    elif args:
        return smgr.createInstanceWithArguments(service, args)
    elif ctx:
        return smgr.createInstanceWithContext(service, ctx)
    else:
        return smgr.createInstance(service)

def msgbox(message, title="Message", boxtype='message', buttons=1, win=None):
    '''
    Simple message box.

    Like the oobasic build-in function msgbox,
    but simplified as only intended for quick debugging.
    Signature: msgbox(message, title='Message', boxtype='message', buttons=1, win=None).
    '''
    types = {'message': MESSAGEBOX, 'info': INFOBOX, 'error': ERRORBOX,
             'warning': WARNINGBOX, 'query': QUERYBOX}
    tk = createUnoService("com.sun.star.awt.Toolkit")
    if not win:
        desktop = createUnoService("com.sun.star.frame.Desktop")
        frame = desktop.ActiveFrame
        if frame.ActiveFrame:
            # top window is a subdocument
            frame = frame.ActiveFrame
        win = frame.ComponentWindow
    box = tk.createMessageBox(win, types[boxtype], buttons, title, message)
    return box.execute()
С уважением,
Михаил Каганский

economist

Ссылка на Basic код для понимания, насколько он сложнее и длиннее чем Python-ий.
Не надо выделять, можно сразу копировать:

import pyperclip # его тянет при установке pyautogui
...
pyperclip.copy(txt)
pyautogui.alert(text=txt, title='Сообщение', button='OK')
...


А если все-таки хочется наглядно кодом выделить текст в msgbox - то pyautogui в помощь. Без этой либы в офисной автоматизации вам не обойтись, как и без чтения ее 29-страничной доки.

Доку для любых Python либ ищем в 3-х местах: pypi.org, "сайт проекта", и страничка с кодом на github.com - все три ссылки обычно рядом в любом из трех названных мест. 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

Цитата: Ципихович Эндрю от 13 января 2024, 08:50а если пойти далее и сделать msgbox по подобию того, какой выдаёт APSO - где можно скопировать текст сообщения
А что, в примере из #15 нельзя выделить и скопировать текст сообщения (или его часть)?

Михаил в #23 показал исходники из проекта.
Если вы уже скачали расширение apso.oxt, то можете посмотреть и тексты программ в подпапке \python архива, поскольку файлы с расширением .oxt являются архивами (можно, например, добавить расширение .zip и исследовать содержание средствами MS Windows. Я пользуюсь Far Manager, который умеет показывать содержимое любых архивов).
Владимир.

Ципихович Эндрю

Цитата: sokol92 от 13 января 2024, 14:17А что, в примере из #15 нельзя выделить и скопировать текст сообщения (или его часть)?
там файл ods я не в курсе где и что там находится, так как ексель ещё иногда юзал-давно, а этого зверя Calc тоже щупал ранее чисто из любопытства - но он мне без надобности, так что извините я не не хотел, а не понял, что там и как....
а переспросить видимо забыл))

sokol92

Открываете .ods (или документ LO иного типа).
Меню / Сервис / Макросы / Выполнить макрос.
Владимир.

Ципихович Эндрю

Цитата: sokol92 от 13 января 2024, 14:52Открываете .ods (или документ LO иного типа).
Меню / Сервис / Макросы / Выполнить макрос.
так я так делал, а потом насколько я понимаю они должны быть в PyMsgbox.ods, а там есть папка Standard, и она не раскрывается - значит пустая
или как нужно?

sokol92

В моем примере папка Module (перед Standard).
Владимир.