Python: Wejście i wyjście ekranu

Spis treści
Indeks 🔎︎

# Wejście i wyjście ekranu

Standardowy plik wyjściowy Pythona nie jest dostępny podczas uruchamiania makr Pythona z menu Narzędzia - Makra - Wykonaj makro…. Prezentacja wyjścia modułu wymaga interaktywnej konsoli Pythona. Funkcje takie jak input(), print(), repr() i str() są dostępne w powłoce Pythona.

Moduł LibreOffice msgbox Pythona proponuje metodę msgbox(), która jest zilustrowana na stronach z przykładami Tworzenie detektorów zdarzeń i Tworzenie obsługi okna dialogowego.

LibreOffice Basic proponuje ekranowe funkcje I/O InputBox(), Msgbox() i Print(). Istnieją alternatywy dla języka Python, które opierają się albo na zestawie narzędzi abstrakcyjnych okien interfejsu API LibreOffice, albo na wywołaniach funkcji języka Python do Basic. Ten ostatni proponuje składnię, która jest celowo zbliżona do składni Basic i używa modułu Pythona obok modułu Basic. API Scripting Framework służy do wykonywania wywołań funkcji w językach Basic, BeanShell, JavaScript i Python.

## Składnia Pythona:

MsgBox(txt, buttons=0, title=None)

InputBox(txt, title=None, default=None)

Print(txt)

## Przykłady:

>>> import screen_io as ui

>>> reply = ui.InputBox('Please enter a phrase', title='Dear user', defaultValue="here..")

>>> rc = ui.MsgBox(reply, title="Confirmation of phrase")

>>> age = ui.InputBox('How old are you?', title="Hi")

>>> ui.Print(age)

## Instalacja:

- Skopiuj moduł Pythona screen_io w Moje makra w <UserProfile>/Scripts/python/pythonpath,

- Skopiuj moduł Basic uiScripts do kontenera Moje makra w bibliotece Basic Standard.

- Uruchom ponownie LibreOffice.

### Moduł Pythona screen_io

            # -*- coding: utf-8 -*-
            from __future__ import unicode_literals

            def MsgBox(prompt: str, buttons=0, title='LibreOffice') -> int:
                """ Wyświetla okno dialogowe zawierające komunikat i zwraca wartość."""
                xScript = _getScript("_MsgBox")
                res = xScript.invoke((prompt,buttons,title), (), ())
                return res[0]

            def InputBox(prompt: str, title='LibreOffice', defaultValue='') -> str:
                """ Wyświetla monit w oknie dialogowym, w którym użytkownik może wprowadzić tekst."""
                xScript = _getScript("_InputBox")
                res = xScript.invoke((prompt,title,defaultValue), (), ())
                return res[0]

            def Print(message: str):
                """Wypisuje określony ciąg znaków lub wyrażenie liczbowe w oknie dialogowym."""
                xScript = _getScript("_Print")
                xScript.invoke((message,), (), ())

            import uno
            from com.sun.star.script.provider import XScript
            def _getScript(script: str, library='Standard', module='uiScripts') -> XScript:
                sm = uno.getComponentContext().ServiceManager
                mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
                scriptPro = mspf.createScriptProvider("")
                scriptName = "vnd.sun.star.script:"+library+"."+module+"."+script+"?language=Basic&location=application"
                xScript = scriptPro.getScript(scriptName)
                return xScript

Metody MsgBox i InputBox z usługi Basic zawartej w bibliotece ScriptForge wywołują bezpośrednio ich natywne odpowiedniki w Basic.

### Moduł Basic uiScripts

            Option Explicit
            Private Function _MsgBox( prompt As String, Optional buttons As Integer, _
                    Optional title As String ) As Integer
                _MsgBox = MsgBox( prompt, buttons, title )
            End Function
            Private Function _InputBox( prompt As String, Optional title As String, _
                    Optional default As String) As String
                _InputBox = InputBox( prompt, title, default )
            End Function
            Private Sub _Print( msg As String )
                Print msg
            End Sub

Rozszerzenie Alternative Python Script Organizer (APSO) udostępnia funkcję msgbox() z jego modułu apso_utils.

Tematy pokrewne

Funkcje we/wy ekranu

Przykłady programowania w Pythonie

Pomoc skryptów Pythona LibreOffice

Wywoływanie makr Basic z Pythona