2012-03-29 3 views
0

私はPythonで作業しています。私はGui.PyモジュールでQtdesignerでGUIを作成しました。私は別に作成したコードモジュールを持っています。今問題がありますが、コードモジュールにwhileループでしばらくの間印刷するメソッドがあります。私はリアルタイムでこれを行うことができますどのように..私のGUIがボタンクリックイベントでその印刷メッセージを表示textbrowserたい... サンプル・コードは次のとおりです。GUIモジュールとPythonのバックエンドコードモジュールの統合

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

は、HAV、代わりに直接結果を印刷somefunctionを有しているとあなたに

答えて

0

をありがとう、私を助けてください呼び出し元に結果をyield返します。呼び出し元は、文字列をGUIに1つずつ追加できます。

しかし、結果が生成に長時間かかる場合は、任意のsleep関数がスローされるので、ほとんどのGUIがイベントに応答するために必要なメッセージループをブロックします。その場合、別のスレッドにそのオブジェクトをオフロードし、結果をGUIスレッドに戻して表示させることができます。

0

QTextBrowserにprintステートメントを表示するには、いくつかのスロットと信号を接続します。あなたは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

ありがとう、私はそれを持っています:) –

関連する問題