Programım neden çalışmıyor

Merhaba arkadaşlar buna benzer bir konu açmış ve aldığım hatayı kapatmıştım bu forum sayesinde ama şimdi de program hiç çalışmıyor. Yani gui açılıyor ama program görevini yapmıyor program biz mouseye her tıkladığımızda 3 kere mouseye tıklayacak. Ama çalışmıyor düğmeye basıyorum ama çalışmıyor aşağıda kodu vereceğim.

from PyQt5 import QtCore, QtGui, QtWidgets
import pyautogui
from pynput import keyboard
import time
import win32api

def place_macro():
    while True:
        left = win32api.GetKeyState(0x01)
        right = win32api.GetKeyState(0x02)
        a = win32api.GetKeyState(0x01)
        b = win32api.GetKeyState(0x02)

        if a != left or b != right:
            left, right = a, b
            if a < 0 or b < 0:
                print('Hello World!')
                pyautogui.click(button='right', clicks=100, interval=0.25)

def attack_macro():
    while True:
        left = win32api.GetKeyState(0x01)
        right = win32api.GetKeyState(0x02)
        a = win32api.GetKeyState(0x01)
        b = win32api.GetKeyState(0x02)

        if a != left or b != right:
            left, right = a, b
            if a < 0 or b < 0:
                print('Hello World!')
                pyautogui.click(button='left', clicks=100, interval=0.25)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(775, 590)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(110, 10, 531, 61))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(80, 160, 231, 251))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(attack_macro)
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(470, 160, 231, 251))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(place_macro)
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(30, 420, 731, 41))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.clicktime = QtWidgets.QTextEdit(Form)
        self.clicktime.setGeometry(QtCore.QRect(340, 250, 104, 71))
        self.clicktime.setObjectName("clicktime")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(320, 190, 151, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(320, 220, 141, 16))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "       you are using StaticSploit\'s program"))
        self.pushButton.setText(_translate("Form", "Attack macro"))
        self.pushButton_2.setText(_translate("Form", "place block macro"))
        self.label_2.setText(_translate("Form", "for make attack macro on/off  press alt gr. For make place macro on/off press right shift."))
        self.label_3.setText(_translate("Form", "when you click how many "))
        self.label_4.setText(_translate("Form", "times do you want"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Bu ikisi sonsuz döngü oluşturduğu için butona bastığınız anda arayüzün donup kalması gayet normal.

threading kütüphanesini veya arayüz kütüphanesinin kendine has QThread olayını kullanmanız gerekiyor.

Tamam. Bundan sonra onu kullanacağım.Ama nasıl tam olarak nasıl bir kod yazmam gerekiyor ?