Como controlar programas gráficos a partir do terminal?

4

Estou tentando controlar o programa Inkscape do terminal; por exemplo, eu quero abrir o menu Arquivo, o menu Editar ou o menu Extensões no Inkscape a partir do terminal sem a necessidade de clicar no menu do próprio programa.

Pesquisei muito, mas não consegui encontrar uma resposta para o meu problema. Como faço para controlar programas gráficos do terminal?

    
por Sara 23.02.2015 / 14:36

1 resposta

2

Tenho certeza de que o ldtp pode ajudá-lo a automatizar a GUI do Inkscape. Primeiro, abra um terminal e instale as ligações do python:

sudo apt-get install python-ldtp

Em seguida, inicie o interpretador python:

$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ldtp import *
>>> launchapp('inkscape')
25362
>>> GTK Accessibility Module initialized
>>> selectmenuitem('*Inkscape', 'mnuExtensions')

ou crie um script dedicado com o seguinte snippet:

#!/usr/bin/env python2

from ldtp import *
import time

launchapp('inkscape')
waittillguiexist('*-Inkscape')
selectmenuitem('*-Inkscape', 'mnuExtensions')
time.sleep(2)
selectmenuitem('*-Inkscape', 'mnuEdit')
time.sleep(2)
selectmenuitem('*-Inkscape', 'mnuFile')
time.sleep(2)
selectmenuitem('*-Inkscape', 'mnuQuit')
waittillguinotexist('*-Inkscape')

Conhecer todos os nomes dos componentes da GUI é um pouco difícil, pois ldtpeditor está obsoleto (consulte a página freedesktop e este tópico na lista de discussão freedesktop-ldtp-dev ).

O melhor que você pode fazer para identificar o controle a ser usado para automatizar o aplicativo é confiar em getobjectlist)('<window name>') .

Exemplo (para definir o ponto horizontal do Restack e a visualização ao vivo):

$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ldtp import *
>>> launchapp('inkscape')
11413
>>> GTK Accessibility Module initialized

>>> selectmenuitem('*Inkscape', 'Restack...')
1
>>> getobjectlist('Restack')
['dlgRestack', 'flr8', 'flr9', 'flr4', 'flr5', 'lblHorizontalPoint', 'flr7', 'flr0',
'flr1', 'flr2', 'flr3', 'lblVerticalPoint', 'mnuBottomtoTop(90)', 'mnuTop', 'spr1', 
'mnu8', 'flr11', 'mnu0', 'cboLefttoRight(0)', 'mnuRight', 'mnuRadialInward', 
'mnuMiddle1', 'mnu12', 'lblLivepreview', 'cboTop', 'flr6', 'mnuLefttoRight(0)', 
'btnApply', 'lblAngle', 'chk0', 'mnuRighttoLeft(180)', 'mnuRadialOutward', 'sbtn0', 
'mnuArbitraryAngle', 'lblRestackDirection', 'mnuLeft', 'btnClose', 'mnuMiddle', 
'mnuBottom', 'flr12', 'flr10', 'spr0', 'mnuToptoBottom(270)', 'cboMiddle']
>>> click('dlgRestack', 'mnuMiddle1')
1
>>> click('dlgRestack', 'mnuMiddle')
1
>>> click('dlgRestack', 'chk0')
1
>>> click('dlgRestack', 'btnApply')
1
>>> click('dlgRestack', 'chk0')
1
>>> click('dlgRestack', 'btnApply') 
    
por Sylvain Pineau 23.02.2015 / 15:33