PyQt5 Macro Programı Yazma

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Cin Padişahı
Süper Üye
Katılım
9 Ocak 2020
Mesajlar
774
Çözümler
6
Tepki puanı
75
Ödüller
7
6 HİZMET YILI
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

Alakasız yorumları raporlayacağım.

Python:
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_())
 
Son düzenleme:
Üye
Katılım
30 Haz 2019
Mesajlar
49
Tepki puanı
4
Yaş
30
6 HİZMET YILI
aga bende pyqt5 bir türlü çalışmıyor o yüzden alternatifi olan pyside6 yı kullanıyorum. syntaxları filan çok farklı ama
 
Üye
Katılım
17 Ocak 2021
Mesajlar
5
Tepki puanı
2
Ödüller
1
Yaş
25
5 HİZMET YILI
PyQT bilmiyorum ve telefonda olduğum için kodu detaylı inceleme fırsatım olmadı fakat..

İlk soru için fonksiyonlarda "if kontrol == True" yi başlangıca değil while döngüsüne atıp
"else:
break" şeklinde kontrolü yapabilirsiniz.

İkinci soru için her değişkeni class attribute yapın ve init'e False şeklinde koyun, self.rr2 = False gibi.
Checkboxlara tanımlayacağınız fonksiyonun görevi sadece bu değerleri True ya da False şeklinde değiştirmek olsun.
Start fonksiyonu da her fonksiyona if else ile atıfta bulunarak değeri True olan fonksiyonları çalıştırsın,eğer birden fazla fonksiyon aynı anda çalışacak ise bunu PyQT ye özel bir thread kütüphanesi vardı adını unuttum, onunla yapabilirsiniz.

Ama benim aklıma takılan nokta ilk isteğinizin ikinci istek ile çelişmesi oldu.Checkbox True verince algoritma başlasın istemiyorsunuz fakat False verince dursun istiyorsunuz.Bence yukarıda anlattığım gibi bir de Stop butonu yapın,onun da görevi döngülerden çıkmak olsun.
 
Banlı Üye
Katılım
18 Şub 2020
Mesajlar
520
Çözümler
4
Tepki puanı
71
Yaş
23
6 HİZMET YILI
While ile checkboxların durumlarını kontrol edip ona göre işlemleri yaptırabilirsin.
Python:
while True:
    if checkbox1.isChecked():
        #Do Something
        pass
    else:
        #Do Otherthing
        pass

Ve Programın donmaması için threading veya asenkron kodlama konusuna göz atmalısın.
 
Üye
Katılım
7 Şub 2020
Mesajlar
46
Tepki puanı
0
Ödüller
1
Yaş
25
6 HİZMET YILI
benimde bir sorum olucak pyqt5 arayüzü ile diğer programlama dıllerını kulanabiliyormuyuz
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst