3

「開始」ボタンを押した後、カウンターを開始する基本機能を作成しようとしていますが、停止ボタンを押した後、カウンターを停止しますが、プロセスを開始した後、スレッドのカウントのみが機能しているように見え、停止ボタンを押すことはできません

#!/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_())

どうも

4

2 に答える 2

5

これで、スレッドを作成する前にスロー関数を呼び出します。代わりにこれを試してください:

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

Qt アプリケーションQThreadでは、独自のイベント ループを実行し、シグナルとスロットを使用してメイン スレッドと通信できるクラスを検討することもできます。

于 2012-10-16T09:11:38.860 に答える
1

あなたはThreadクラスを完全に間違って使用しています。メソッドの結果を渡していますがcounterr、決して返されません。

としてクラスにcounterr(それを呼び出さに)渡し、明示的に開始します。Threadtarget

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

bolまた、クラス変数ではなく、インスタンス変数としてアクセスしてください。

于 2012-10-16T09:11:58.120 に答える