2017-11-24 3 views
0

누군가 어떻게 말해 줄 수 있습니까?하나의 파이에서 gui로 문자열 전달하기

main.py와 gui.py (pyqt4에서 작성)가 있습니다. main.py는 "hello world"라는 코드를 실행하고이 문자열을 gui.py listWidget.addItem()에 전달하려고합니다.

그래서 main.py에서 내가 그랬어 :

from gui import Ui_Form 
send_str = "hello all" 
ui.listWidget.addItem(send_str) 

나는 오류를 얻을 : NameError: global name 'ui' is not defined을. 내가 작업하는 모든 경우, 한 평에 모두 코드를 넣으면 gui.py 같이 gui.py 가리키는

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Form = QtGui.QWidget() 
    ui = Ui_Form() 
    ui.setupUi(Form) 
    Form.show() 
    sys.exit(app.exec_()) 

입니다. 이 두 가지를 분리하는 방법, 내 main.py가 끝없는 루프에서 실행되기를 원하기 때문에 때때로 GUI를 열고 main.py가 창으로 보낼 새 값을 확인하고 싶습니까?

+0

모듈을'import '할 때'import'를하는 스크립트에서 전역을 정의하는 모든 변수를 자동으로 만들지 않습니다. 이 경우'gui.ui'와 같이 모듈 이름 앞에 접두사가 필요합니다. 그러나 'ui'를 정의한 코드 부분은'if __name__ == "__main __":'내부에 있으므로 스크립트를 가져올 때 변수가 정의되지 않으므로 여전히 문제가 있습니다. 접두사를 추가 한 경우 – martineau

+0

답장을 보내 주셔서 감사합니다. 나는 이제 어떻게이 일을 할 수 있는지 전혀 모른다. 아이디어는 "서비스"를 메인 py로 실행하고, 필요에 따라 gui를 실행하고 상태를 서비스와 동일하게 체크 할 때마다 ... – nele

+0

'gui.py'는 변경할 수 있습니까? – martineau

답변

0

첫 번째 문제는 UI 변수는, 즉 당신이 모듈을 가져올 때 해당 분기가 활성화되지 않기 때문에 자체 경우입니다 이름 ==는 "주요"

두 번째 문제가되는 경우 로컬 때문이다 c에서 메인()과 유사

세 번째 문제 : QT의 GUI가 주 스레드에서 실행되어야합니다. 이것은 알고리즘이 다른 스레드에서 실행되어야 함을 의미합니다 (타이머 대신 사용할 수있는 방법이 있지만 구현하기가 어렵습니다).

QT 스레드에 대한 자습서를보고 신호 슬롯 메커니즘을 사용하여 gui 스레드와 알고리즘 스레드.

+0

도움을 주신 모든 분들께 감사드립니다. – nele

관련 문제