我写一个GUI程序,它允许用户重复发送消息到一个电话号码,重复可配置的延迟和数量。使用gobject.timeout_add_seconds - 段错误
我用QT设计器创建GUI,现在我想创建它背后的代码。我试图让程序在按下开始按钮时开始发送消息,但不冻结gui。
我想使用gobject.timeout_add_seconds来检查是否需要每隔1秒发送新消息,但是当它导致分段错误时。只要按下按钮开始发送邮件
queueMessages被调用,sendMessages应该运行每1秒发送任何需要的消息。
让我知道如果有一个更简单的方法来做到这一点(如线程)。我愿意接受任何其他想法。
这里是适用的代码。我可以包括GUI代码太多,如果这将是有益的:
#!/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_())
谢谢您的帮助!这正是我所需要的。 – xur17 2011-02-06 20:03:16