PyQt5 ile basit bir program yazdım. Çalışma olarak sonuç getiriyor ama sorguyu yaparken uygulama tamamen donuyor. Ben sorguyu yaparken program donmasın istiyorum. Bunu nasıl yapabilirim? Thread özelliğini araştırdım ama genelde hep "run "fonksiyonu üzerinden çalıştırmışlar bende yapmak istediğim işlemin fonksiyonunu “run” olarak adlandırınca çalışıyor ama ilerde birden fazla buton koyduğumda farklı farklı fonksiyonlara bağlamam gerekecek. Dolayısıyla bu sorunu nasıl aşarım ?
import sys
import requests
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QMainWindow, QApplication
from bs4 import BeautifulSoup
#------------ ARAYÜZ --------------#
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(476, 391)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(0, 270, 471, 81))
self.pushButton.setObjectName("pushButton")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(0, 0, 471, 31))
self.lineEdit.setObjectName("lineEdit")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(0, 50, 471, 192))
self.listWidget.setObjectName("listWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 476, 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.pushButton.setText(_translate("MainWindow", "GETİR"))
#--------- UYGULAMA --------#
class Worker(QThread):
def listele(self):
url = ui.lineEdit.text()
r = requests.get(url)
soup = BeautifulSoup(r.content)
linkler = soup.find_all("a")
for link in linkler:
baslik = link.get("title")
_translate = QtCore.QCoreApplication.translate
item = QtWidgets.QListWidgetItem()
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(11)
item.setFont(font)
item.setCheckState(QtCore.Qt.Checked)
ui.listWidget.addItem(item)
item.setText(_translate("MainWindow", baslik))
#------------------------------------------------------------------#
Uygulama = QApplication(sys.argv)
menu = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(menu)
menu.show()
ui.pushButton.clicked.connect(Worker.listele)
sys.exit(Uygulama.exec_())