в приложении PyQt5 поток QThread выполняется, но только после завершения основного цикла
написал двухоконное приложение для обработки веб-формы. первое окно авторизация, второе - обработка. переход между окнами через контроллер: class Controller:
def __init__(self):
pass
def select_forms(self, text):
if text == '1':
self.form1 = my_pass()
self.form1.switch_window.connect(self.select_forms)
self.form1.show()
if text == '2':
self.form2 = mywindow()
self.form2.switch_window.connect(self.select_forms)
self.form2.show()
self.form1.close()
на второй форме(окне) class mywindow(QtWidgets.QMainWindow): присутствует tableView. в цикле по строкам данной таблицы обрабатывается Web-окно:
def GoGo(self):
model = self.ui.tableView.model()
nrow = model.rowCount(1)
for row in range(nrow):
обработка Web
решил добавить progressBar, для этого:
- Создал класс
'
class External(QThread):
countChanged = QtCore.pyqtSignal(int)
def __init__(self, parent = None ):
super().__init__()
self.pos_p = None
self.all_p = None
def run(self):
if (self.pos_p != None and self.all_p != None):
count = round((self.pos_p/self.all_p)*100)
self.countChanged.emit(count)
'
- Создал экземпляр класса и привязал функцию
'
class mywindow(QtWidgets.QMainWindow):
switch_window = QtCore.pyqtSignal(str)
def __init__(self):
super(mywindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
QApplication.clipboard().dataChanged.connect(self.change_buffer)
здесь
#self.percent_prog = External(None)
#self.percent_prog.countChanged.connect(self.onCountChanged)
'
- в цикле передаю параметры экземпляру класса и стартую
'
def GoGo(self):
model = self.ui.tableView.model()
nrow = model.rowCount(1)
for row in range(nrow):
# здесь
#self.percent_prog.all_p = nrow
#self.percent_prog.pos_p = row+1
#self.percent_prog.start()
# здесь
обработка Web
'
функция
def onCountChanged(self, value):
self.ui.progressBar.setValue(value)
срабатывает необходимое количество раз, но только после отработки всего цикла for row in range(nrow):
помогите пожалуйста исправить
@S. Nick
def onCountChanged(self, value):
self.ui.progressBar.setValue(value)
print("position ProgresBar = " + str(value))
def GoGo(self):
model = self.ui.tableView.model()
nrow = model.rowCount(1)
for row in range(nrow):
time.sleep(1)
# поток
self.percent_prog.all_p = nrow
self.percent_prog.pos_p = row+1
self.percent_prog.start()
# поток
index = model.index(row, 1)
Tip = model.data(index, Qt.DisplayRole)
print("processing row" + str(row)+" value = " + Tip)

