2011-09-06 11 views
1

내 응용 프로그램을 기초 작업으로 코딩하고 있으며 응용 프로그램을 개발하는 데 pydide를 사용하고 있습니다. 유일한 문제는 활성화 할 qml 스위치를 얻는 것입니다. 현재 나는 QML 파일에 있습니다 : 응용 프로그램이 시작이의 switchedComponent를 누르면 파이썬에 신호와 신호 시작하지만 스위치가 결코 파란색으로 변 않고 텍스트가 변경되지 않습니다에 연결하는 기능을 전송qys pyside 및 스위치

signal buttonClicked; 
//function start(){text.text="started";buttonClicked()} 
Switch { 
    id:switchComponent 
    anchors.verticalCenterarent.verticalCenter; 
    anchors.horizontalCenterarent.horizontalCenter; 
} 
//end of switch 

Text { 
    id:text 

    color:"red" 
    anchors.bottom: switchComponent.top 
    anchors.horizontalCenter: switchComponent.horizontalCenter 
    //text: switchComponent.checked ? "GROUNDWORK ON" & start() : "Press to Start" 
    //text: switchComponent.checked ? "GROUNDWORK ON" && start() : "Press to Start" 
    text: switchComponent.checked ? start() : "Press to Start" 
    font.pixelSize: 30 
    smooth:true 
} 

"시작됨". 응용 프로그램이 실행 중임을 알 수있는 유일한 방법은 ~ 10 초 후에 응용 프로그램을 닫으라는 메시지가 표시됩니다. 아니오를 누르면 앱이 정상적으로 작동합니다.

왜 이런 일이 발생하는지 알고 있습니까? 기본적으로 파이썬 함수가 실행되기 전에 스위치와 텍스트를 활성화하여 사용자가 무슨 일이 일어나고 있는지 알고 싶습니다. 편집 : 전체 qml 파일은 here.https : //projects.developer.nokia.com/airplay/browser/groundwork/qml/main.qml에서 찾을 수 있습니다. 이것은 qml과 함께 pyside를 사용하는 일부일뿐입니다. 파이썬 함수를 처리 할 때 스레드 블럭.

답변

0

내가 추측 할 수 있도록 코드 (그리고 스위치가 없습니다)로 인해 약간 혼란 스럽습니다.

텍스트 구성 요소에서 start()를 호출하는 것이 잘못된 것처럼 보입니다. 단지이어야합니다

Text { 
    ... 
    text: switchComponent.checked ? "GROUNDWORK ON" : "Press to Start" 
} 

텍스트를 명시 적으로 더 이상 설정할 필요가 없으며 스위치가 구성 요소의 신호를 트리거해야합니다.

Switch { 
    onCheckedChanged: { 
     if (checked) { 
      buttonClicked() 
     } 
    } 
} 

이것은 내 코드를 이해 한 것으로 추측됩니다.

+0

당신이 말하는 것은 의미가 있으며 나는 그것을 당신의 방법으로 시도했지만 동일한 결과를 얻습니다. 이 프로그램은 작동하지만 Gui의 응답이 없습니다. qml의 주요 GUI 스레드가 파이썬 태스크가 완료 될 때까지 기다리는 것이 차단되었다고 생각합니다. 내 주요 작업과 푸시되는 스위치 사이에 더미 작업을 넣어야한다고 생각합니다. 어쨌든 지금 상태를 확인하는 방법을 알고 버튼을 눌러 주셔서 감사합니다. – thegreattaurus