2012-10-16 130 views
3

我試圖做的基本功能 後按下「啓動」按鈕啓動計數器,按下停止按鈕停止計數器, 後,但我開始處理後,它看起來像只有計數線程工作,這是不可能的按下停止按鈕蟒蛇UI凍結

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui, QtCore 
from test.test_sax import start 
import time 
from threading import Thread 
import threading 
class Example(QtGui.QWidget): 
    x = 1 
    bol = True 
    def __init__(self): 
     super(Example, self).__init__() 


     self.qbtn = QtGui.QPushButton('Quit', self) 

     self.qbtn.resize(self.qbtn.sizeHint()) 
     self.qbtn.move(50, 50) 
     self.qbtn2 = QtGui.QPushButton('Start', self) 

     self.qbtn2.resize(self.qbtn2.sizeHint()) 
     self.qbtn2.move(150, 50) 

     self.qbtn.clicked.connect(self.stopCounter) 
     self.qbtn2.clicked.connect(self.startUI) 

     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('Quit button') 
     self.show() 
    def stopCounter(self): 
     Example.bol = False 

    def startUI(self): 
     Example.bol = True 
     thread = Thread(self.counterr()) 

    def counterr(self): 
     x = 0 
     while Example.bol: 
      print x 
      x += 1 



if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    a = Example() 
    sys.exit(app.exec_()) 

THX

+1

試試這個:你必須導入線程並開始寫它。 thread.start_new_thread(self.counterr,(0,)) – fecub

回答

5

現在你罵慢功能,你甚至創建線程之前。試試這個:

thread = Thread(target=self.counterr) 
thread.start() 

在Qt應用程序,還可以考慮在QThread類,它可以運行自己的事件循環,並與你的主線程使用信號和槽溝通。

1

您正在使用Thread類完全不正確,恐怕。您傳遞counterr方法的結果,該方法永遠不會返回。

counterr沒有調用它)到Thread類作爲target,然後明確啓動它:

def startUI(self): 
    self.bol = True 
    thread = Thread(target=self.counterr) 
    thread.start() 

此外,剛剛訪問bol作爲一個實例變量,而不是一個類變量。