2012-09-22 5 views
0

일부 장비를 테스트하기 위해 작성된 텍스트 CLI 기반 스크립트가 있습니다. 일부 테스트에는 예/아니오 응답을 입력하고 스크립트 출력을 읽어야합니다. PyQT 앱을 만드는 것이 가능한지 알고 싶습니다. 이런 종류의 상호 작용에 GUI 프론트 엔드를 넣을 수 있습니까? 예 : 사용자가 스크립트를 실행하기 위해 버튼을 클릭하면 스크립트는 GUI의 텍스트 창으로 한 번에 출력 행을 보내 실행되고 GUI에서 입력 된 모든 행은 스크립트로 전송됩니다.Python QT create app. CLI 스크립트와 대화식으로주고받을 수 있습니다.

TIA, 프레드

답변

1

당신이 그것을 가능의 여부를 판단 할 수 있습니다하는 기준은 무엇입니까?

확실히 가능합니다. QProcess 클래스는 Qt 애플리케이션 내에서 외부 프로세스를 실행하고 상호 작용하는 데 필요한 모든 것을 제공합니다. 그 핵심에서, 그것은 subprocess이 할 수있는 모든 것을 할 수 있습니다 (그래도 덜 편리함).

button = QPushButton('start') 
textedit = QTextEdit() 
process = QProcess() 

button.clicked.connect(on_clicked) 

def on_clicked(): 
    process.readyReadStandardOutput.connect(read_ready) 
    process.start('/bin/sh', 
     ('-c', "while /bin/true; do echo hello world ; sleep 1; done")) 

def read_ready(self): 
    chunk = process.readAllStandardOutput() 
    textedit.append(str(chunk)) 

당신이 계획 단계에 아직도 있기 때문에이 왜 GUI 부분에 대한 zenity와 같은 도구를 고려하지 : 여기에 인위적인 사용 예제? 그것은 당신에게 많은 일을 줄 수 있습니다. 체크 박스의 목록을 가져 오기 및 텍스트 영역에 명령의 출력을 보내는 것은 문제의이된다 :

프로젝트와 행운의
parameters=$(
zenity --list --text "Test parameters:" \ 
     --checklist --column "Check" --column "Parameter" \ 
     TRUE "One" TRUE "Two" TRUE "Three" FALSE "Four" \ 
     --separator=":"); 

# parameters -> One:Two:Three 
./instrument-test.py $parameters | zenity --text-info 

최고!

+0

응답 해 주셔서 감사합니다. 파이썬 예제에서 textedit 구성 요소의 키 스트로크를 읽고 프로세스의 STDIN으로 보내는 방법은 무엇입니까? –

+0

[textChanged] (http://www.pyside.org/docs/pyside/PySide/QtGui/QTextEdit.html#PySide.QtGui.PySide.QtGui.QTextEdit.textChanged) 신호를 ' process.write (...)'. KDE 라이브러리의 [konsolepart] (http://api.kde.org/4.5-api/kdebase-apps-apidocs/konsole/html/classKonsole_1_1Part.html)는 재사용 가능한 터미널 에뮬레이터 구성 요소이며 이런 종류의 상호 작용은 더 쉽고 (더 잘 보이는) ([예제] (https://projects.kde.org/projects/kde/kdebindings/pykde4/repository/revisions/master/entry/examples/kpartsExamples/konsolepart.py)) . – gvalkov