I'm trying to display some data by using QTextBrowser. However it freezes because of I dont use threading in a right way. I searched some QThread questions on stackoverflow, but could'nt figure out why my code is not working...
I want to print "Hello" five times with sleeping 1 sec in every process
I also want to get input with QLineEdit to set time.sleep(cooldown), but i can do it after I solve my Qthread problem.
The solutions that i searched and tried to implement to my code are;
PyQt5: Update labels inrun time
probably, i used the wrong implementation method. But im a newbie, please help me with that
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'denn.ui'
#
# Created by: PyQt5 UI code generator 5.12.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
from time import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
MainWindow.setStyleSheet("")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Open Sans")
font.setPointSize(20)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Open Sans")
font.setPointSize(20)
self.lineEdit.setFont(font)
self.lineEdit.setAlignment(QtCore.Qt.AlignCenter)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout.addWidget(self.lineEdit)
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Open Sans")
font.setPointSize(20)
self.textBrowser.setFont(font)
self.textBrowser.setObjectName("textBrowser")
self.verticalLayout.addWidget(self.textBrowser)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Open Sans")
font.setPointSize(20)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton {\n"
" color: white;\n"
" border: 2px solid #46963f;\n"
" border-radius: 20px;\n"
" border-style: outset;\n"
" /*background: qradialgradient(\n"
" cx: 0.3, cy: -0.4, fx: 0.3, fy: -0.4,\n"
" radius: 1.35, stop: 0 #fff, stop: 1 #46963f\n"
" );*/\n"
" background:#46963f;\n"
" padding: 5px;\n"
" }\n"
"\n"
"QPushButton:hover {\n"
" border: 2px solid #07121b;\n"
" /*background: qradialgradient(\n"
" cx: 0.3, cy: -0.4, fx: 0.3, fy: -0.4,\n"
" radius: 1.35, stop: 0 #fff, stop: 1 #1b486d\n"
" );*/\n"
" background: #1b486d;\n"
" }\n"
"\n"
"QPushButton:pressed {\n"
" border: 2px solid #07121b;\n"
" border-style: inset;\n"
" /*background: qradialgradient(\n"
" cx: 0.4, cy: -0.1, fx: 0.4, fy: -0.1,\n"
" radius: 1.35, stop: 0 #fff, stop: 1 #1b486d\n"
" );*/\n"
" background: #1b486d;\n"
"\n"
" }")
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Deneme Programı"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Bekleme Süresi"))
self.pushButton.setText(_translate("MainWindow", "Başlat"))
try:
self.pushButton.clicked.connect(self.x)
except Exception as e:
print(e)
def x(self):
cd = int(self.lineEdit.text())
for i in range(5):
self.thread = DummyThread(self, cd)
self.thread.start()
self.thread.finished.connect(self.a)
def a(self):
self.textBrowser.setText(self.textBrowser.toPlainText() + "\nHello")
class DummyThread(QThread):
finished = pyqtSignal()
def __init__(self,cd):
super(DummyThread, self).__init__()
self.cd = cd
def run(self):
time.sleep(self.cd)
self.finished.emit()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())