PyQt5 ile Macro Programı yazmak

Herkese merhabalar ben PyQt5 ile bir macro yazılımı yazmak istiyorum belki bilenler vardır Knight Online oyunun asassin jobu için geçerli bir algoritma.Arayüzümü oluşturdum fakat fonksiyonlarımda bir kaç problemim var işin içinden çıkamadım.

Sorunlarım
1)Ben herhangi bir kutucuğu işaretlediğimde döngümden dışarıya çıkamıyorum program hata veriyor yani herhangi bir özelliği aktif ettiğim zaman o döngünün bitmesini beklemek zorundayım fakat kullanıcı istediği zaman o döngüden çıkabilsin istiyorum.Benim yazdığım satırda ise döngü bitmeden çıkmak istersek program hata veriyor.
2) Ben oluşturduğum alt fonksiyonları yani checkbox’lara tıklanırsa direkt o fonksiyonun başlatılmasını istemiyorum . o checkboxları kontrol etmek ve Başlat butonuna basıldığı zaman seçilen checkbox fonksiyonlarının görevini yerine getirmesini istiyorum.

Yardımlarınızı bekliyorum . İyi günler

Kodlar :
from PyQt5 import QtWidgets
import os,sys
import pyautogui
import time

class Window(QtWidgets.QWidget):

def __init__(self):

    super(Window, self).__init__()

    self.init_ui()

def init_ui(self):
    self.durdur = QtWidgets.QPushButton("Durdur")
    self.baslat = QtWidgets.QPushButton("Başlat (Caps Lock) ")
    self.tus_sec = QtWidgets.QLabel("Combo İçin Tuş Seçiniz ")
    self.z = QtWidgets.QCheckBox("Z")
    self.w = QtWidgets.QCheckBox("W")
    self.biraltiyedisekiz = QtWidgets.QCheckBox("1-6-7-8")
    self.rr2 = QtWidgets.QCheckBox("R-R-2")
    self.zrr2 = QtWidgets.QCheckBox("Z-R-R-2")
    self.z1 = QtWidgets.QCheckBox("Z-1")
    self.ikisekizr = QtWidgets.QCheckBox("2-8-R")
    self.uyarı = QtWidgets.QLabel("")
    self.combo = QtWidgets.QLineEdit()
    self.hız_yazısı = QtWidgets.QLabel("Gecikme Süresini Giriniz Saniye:")
    self.secim = QtWidgets.QLabel("Pot Light Feet Vs İçin tuş Seçiniz ")
    self.one = QtWidgets.QCheckBox("1")
    self.two = QtWidgets.QCheckBox("2")
    self.three = QtWidgets.QCheckBox("3")
    self.four = QtWidgets.QCheckBox("4")
    self.five = QtWidgets.QCheckBox("5")
    self.six = QtWidgets.QCheckBox("6")
    self.seven = QtWidgets.QCheckBox("7")
    self.eight = QtWidgets.QCheckBox("8")
    self.hız_yazısı2 = QtWidgets.QLabel("Gecikme Süresini Giriniz Saniye:")
    self.potlightms = QtWidgets.QLineEdit()
    self.potlightfeetgecikme = QtWidgets.QPushButton("Başlat (Scroll Lock)")


    h_box2 = QtWidgets.QHBoxLayout()

    h_box2.addWidget(self.one)
    h_box2.addWidget(self.two)
    h_box2.addWidget(self.three)
    h_box2.addWidget(self.four)
    h_box2.addWidget(self.five)
    h_box2.addWidget(self.six)
    h_box2.addWidget(self.seven)
    h_box2.addWidget(self.eight)

    h_box3 = QtWidgets.QHBoxLayout()
    h_box3.addLayout(h_box2)


    h_box = QtWidgets.QHBoxLayout()

    h_box.addStretch()
    h_box.addWidget(self.z)
    h_box.addWidget(self.biraltiyedisekiz)
    h_box.addWidget(self.z1)
    h_box.addWidget(self.ikisekizr)
    h_box.addWidget(self.w)
    h_box.addWidget(self.rr2)
    h_box.addWidget(self.zrr2)
    h_box.addStretch()

    v_box = QtWidgets.QVBoxLayout()

    v_box.addWidget(self.tus_sec)
    v_box.addLayout(h_box)
    v_box.addWidget(self.uyarı)
    v_box.addStretch()
    v_box.addWidget(self.hız_yazısı)
    v_box.addWidget(self.combo)
    v_box.addWidget(self.baslat)
    v_box.addWidget(self.durdur)
    v_box.addStretch()
    v_box.addWidget(self.secim)
    v_box.addLayout(h_box3)
    v_box.addWidget(self.hız_yazısı2)
    v_box.addWidget(self.potlightms)
    v_box.addWidget(self.potlightfeetgecikme)
    v_box.addStretch()


    self.setLayout(v_box)
    self.setWindowTitle("Minor Programı")


    self.z.clicked.connect(lambda : self.z_skil(self.z.isChecked(),self.combo))
    self.w.clicked.connect(lambda : self.w_skil(self.w.isChecked(),self.combo))
    self.biraltiyedisekiz.clicked.connect(lambda : self.biraltı(self.biraltiyedisekiz.isChecked(),self.combo))
    self.rr2.clicked.connect(lambda : self.rere2(self.rr2.isChecked(),self.combo))
    self.zrr2.clicked.connect(lambda : self.zerere2(self.zrr2.isChecked(),self.combo))
    self.z1.clicked.connect(lambda : self.ze1(self.z1.isChecked(),self.combo))
    self.ikisekizr.clicked.connect(lambda : self.sekizikiR(self.ikisekizr.isChecked(),self.combo))
    self.baslat.clicked.connect(lambda : self.start(funck="None"))
    self.durdur.clicked.connect(self.stop)

    self.show()


def stop(self):
    print("Durdu")

def start(self,funck):

    print("Başladı")
    print(funck)

def z_skil(self,kontrol,combohızı):

    if kontrol == True:
        print("z Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i<100:
                print(i)
                pyautogui.press('z',interval=hız)
                i+=1
        except:
            print("Hız Girilmedi")
            self.uyarı.setText("Hız Girilmedi")

def w_skil(self,kontrol,combohızı):
    if kontrol == True:
        print("w Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:
                print(i)
                pyautogui.press('w', interval=hız)
                i += 1

        except:
            print("Hız Girilmedi")

def biraltı(self,kontrol,combohızı):
    if kontrol == True:
        print("1-6-7-8 Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:

                print(i)
                pyautogui.press('1', interval=hız)
                pyautogui.press('6', interval=hız)
                pyautogui.press('7', interval=hız)
                pyautogui.press('8', interval=hız)
                i += 1

        except:
            print("Hız Girilmedi")

def rere2(self,kontrol,combohızı):
    if kontrol == True:
        print("rr2 Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:
                print(i)
                pyautogui.press('z', interval=hız)
                pyautogui.press('r', interval=hız)
                pyautogui.press('r',interval=hız)
                i += 1
        except:
            print("Hız Seçilmedi")

def zerere2(self,kontrol,combohızı):
    if kontrol == True:
        print("z-r-r-2 Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:

                print(i)
                pyautogui.press('z', interval=hız)
                pyautogui.press('r', interval=hız)
                pyautogui.press('r', interval=hız)
                pyautogui.press('2', interval=hız)
                i += 1
        except:
            print("Hız Seçilmedi")
def ze1(self,kontrol,combohızı):
    if kontrol == True:
        print("z-1 Seçildi")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:
                print(i)
                pyautogui.press('z', interval=hız)
                pyautogui.press('1', interval=hız)
                i += 1
        except:
            print("Hız Seçilmedi")


def sekizikiR(self,kontrol,combohızı):
    if kontrol== True:
        print("2-8-r")
        try:
            hız = float(combohızı.text())
            i = 0
            while i < 100:
                print(i)
                pyautogui.press('2', interval=hız)
                pyautogui.press('8', interval=hız)
                pyautogui.press('r', interval=hız)
                i += 1

        except:
            print("Hız Seçilmedi")

if name == “main”:
app = QtWidgets.QApplication(sys.argv)
ekran = Window()
sys.exit(app.exec_())