2011-02-06 1 views
3

사용자가 구성 가능한 지연 및 반복 횟수로 전화 번호로 메시지를 반복적으로 보낼 수있는 GUI 프로그램을 작성 중입니다.gobject.timeout_add_seconds 사용 - 분할 오류

QT 디자이너를 사용하여 GUI를 만들었으므로 이제 코드를 만들려고합니다. 시작 버튼을 눌렀을 때 프로그램에서 메시지를 보내기 시작하지만 GUI를 정지시키지 않으려 고합니다.

gobject.timeout_add_seconds를 사용하여 새 메시지를 매 1 초마다 전송해야하는지,하지만 세그먼트 오류가 발생하는지 확인하려고합니다.

queueMessages는 메시지 보내기를 시작하기 위해 버튼을 누를 때마다 호출되며 sendMessages는 1 초마다 실행되어 필요한 메시지를 보냅니다.

쉬운 방법 (예 : 스레딩)이 있는지 알려주세요. 나는 다른 아이디어에 열려 있습니다.

다음은 해당 코드입니다.

#!/usr/bin/python2.5 
import sys, os 
import time 
import gobject 
from PyQt4 import QtGui,QtCore 
from smsBomb import * 

class MyForm(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     #build parent user interface 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     # Create button actions 
     QtCore.QObject.connect(self.ui.btnSendMessages, QtCore.SIGNAL('clicked()'), self.queueMessages) 
     # Check if we need to send any messages every 1s. 
     self.maintimer = gobject.timeout_add_seconds(1, self.sendMessages) 

    def queueMessages(self): 
     # Queue messages! 
     number = str(self.ui.txtNumber.text()) 
     message = str(self.ui.txtMessage.text()) 
     delay = int(self.ui.txtDelay.text()) 
     repetitions = int(self.ui.txtRepetitions.text()) 
     for i in range(repetitions): 
      os.system('dbus-send --dest=org.QGVDial.TextServer --session --print-reply /org/QGVDial/TextServer org.QGVDial.TextServer.Text array:string:"+1' + number + '" string:"' + message + '"') 
      #time.sleep(delay) 

    def sendMessages(self): 
     # Send Queued Messages as needed 
     print "Sending queued messages..." 
     return True 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 

답변

3

당신은 (Py를) Qt는 응용 프로그램 내에서 (Py를) GTK 타이머 객체를 사용하고있는 것으로 나타납니다 그 도움이 될 것입니다 경우에 나는 너무 GUI 코드를 포함 할 수 있습니다. 내가 gobject.timeout_add_seconds를 사용하여 세그먼트 폴트를 재현 할 수 있었다 동등한 PyQt는 코드

self.maintimer = QtCore.QTimer(self); 
    self.connect(self.maintimer, QtCore.SIGNAL('timeout()'), self.sendMessages) 
    self.maintimer.start(1000) 

self.maintimer = gobject.timeout_add_seconds(1, self.sendMessages) 

를 교체 시도하고 나는 PyQt는 하나로 PyGTK 타이머를 대체 일단 멀리 갔다. 이러한 상황이 발생하지만, this article이 가능한 이유 준다 내가 왜 확신 할 수 없습니다 내가 찾은

하나주의, gobject.timeout_add_seconds()는 GTK 메인 루프에 의존하는 것을, 그래서 당신은 정기적에서 사용할 수 없습니다 비 GTK 파이썬 응용 프로그램.

+0

감사합니다. 이것은 내가 필요한 것입니다. – xur17