Замораживание пользовательского интерфейса python

Я пытаюсь сделать базовую функциональность после нажатия кнопки запуска «start», после нажатия кнопки останова стоп-счетчика, но после запуска процесса, похоже, работает только подсчет потока, и нажатие кнопки остановки невозможно

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

спасибо

Теперь вы вызываете медленную функцию перед тем, как создать поток. Попробуйте это вместо этого:

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

В приложении Qt вы также можете рассмотреть класс QThread который может запускать собственный цикл событий и связываться с вашим основным потоком с помощью сигналов и слотов.

Боюсь, вы используете класс Thread совершенно неправильно. Вы передаете ему результат метода counterr , который никогда не возвращается.

Передайте counterr ( без его вызова) классу Thread в качестве target , затем запустите его явно:

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

Кроме того, просто bol как переменную экземпляра, а не переменную класса.