2012-03-29 68 views
0

我正在使用python。我在一個模塊Gui.Py中的Qtdesigner中創建了一個GUI。我有一個單獨創建的代碼模塊。現在有一個問題,我的代碼模塊中有一段時間在while循環中打印的方法。我想我的GUI textbrowser顯示按鈕單擊事件的打印的短信..我如何可以實時做到這一點.. 的示例代碼:在python中集成GUI模塊和後端代碼模塊

Gui..py文件

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_Form(object): 
def setupUi(self, Form): 
    Form.setObjectName(_fromUtf8("Form")) 
    Form.resize(400, 211) 
    self.textBrowser = QtGui.QTextBrowser(Form) 
    self.textBrowser.setGeometry(QtCore.QRect(140, 10, 256, 192)) 
    self.textBrowser.setObjectName(_fromUtf8("textBrowser")) 
    self.pushButton = QtGui.QPushButton(Form) 
    self.pushButton.setGeometry(QtCore.QRect(20, 80, 97, 27)) 
    self.pushButton.setObjectName(_fromUtf8("pushButton")) 

    self.retranslateUi(Form) 
    QtCore.QMetaObject.connectSlotsByName(Form) 

def retranslateUi(self, Form): 
    Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8)) 
    self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8)) 


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_()) 

現在樣品。 PY

import time 
class A: 
def somefunction(self): 
    i=0 
    while i<100: 
     print str(i) 
     i+=1 
     time.sleep(2) 

if __name__=='__main__': 
p=A() 
p.somefunction() 

請幫助我, 謝謝

回答

0

而不必somefunction直接打印結果,甲肝電話yield結果給調用者。調用者可以將字符串逐個添加到GUI。

但是,如果您的結果需要很長時間才能生成,就像他們使用任意sleep函數一樣,您將阻止大多數GUI需要響應事件的消息循環。在這種情況下,您可以將其卸載到不同的線程,並將結果傳遞迴GUI線程進行顯示。

0

如果您希望打印語句在您的QTextBrowser中顯示回來,那麼您正在查看某些插槽和信號。你可以在QtDesigner中做到這一點。

如果是這樣的話,那麼你應該看看QTimer

p = A() 
timer = QTimer() #Form as parent?? 
timer.timeout.connect(p.somefunc) #different somefunc without the sleep thing 
timer.start(2000) # actually starts on app.exec_() 
+0

謝謝大家,我明白了:) – 2012-04-01 06:08:22