Python bir uygulama yaptım uygulamanın arayüzünde start stop diye düğmeler var adından da anlaşılacağı üzere işlemi başlatıp durduruyor bunu kısayolla da yapılabilmesini istedim. Bu işlem başlayınca durdur kısayoluna/düğmesine basılmadıkça devam edeceği için QShortcut kullanamazdım (Yanlışta düşünüyor olabilirim lütfen belirtin yanlışsa). Bu yüzdende keyboard modülü ile yapmayı denedim ama direk add_hotkey
ile kısayol ekleyince yanıt vermiyor alıyordum add_hotkeyi
pyqtsignale
bağlayarak çözdüm. Kod bu şekildeydi:
class KeyBoardManager(QObject):
ctrlk = pyqtsignal()
def start(self):
add_hotkey("ctrl+k", self.ctrlk.emit, suppress=True)
class window(QMainWindow):
def __init__(self):
super().__init__()
manager = KeyBoardManager(self)
manager.ctrlk.connect(lambda :self.islem())
manager.start()
Bunu daha kolay bir hale getirmeye çalışıyordum ama bir sorunla karşılaştım bu signali bir sözlükten çekmeye çalışınca signal unboundda kalıyor bound olmuyor onun içinde
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
böyle hata alıyorum. Kod böyle:
class KeyBoardManager(QObject):
hotkeys = {}
signals = {}
def add_hotkey(self,hotkey, callback, args=(), suppress=False, timeout=1, trigger_on_release=False):
self.signals[hotkey] = pyqtSignal()
self.signals[hotkey].connect(callback)
self.hotkeys[hotkey] = {
"callback":self.signals[hotkey].emit,"args":args,"suppress":suppress,"timeout":timeout,trigger_on_release:False
}
def start(self):
for h,j in self.hotkeys:
add_hotkey(h,j["callback"],args=j["args"],suppress=j["subpress"],timeout=j["timeout"],trigger_on_release=j["trigger_on_release"])
Bu signal neden unbound da kalıyor, nasıl bounda geçirim, veya bu yanıt vermiyor hatasının daha kolay/alternatif bir çözümü var mıdır varsa nedir yardımcı olursanız sevinirim.