Çok teşekkür ederim, kaliteli bir forum olduğunu ilk gönderimden hissettirdiniz bana.
while True:
pyautogui.write(a, interval=0.5)
Program bu komuta geldiğinde 0.25 ms de bir tane a tusu basıyor. Bu yüzden herhangi bir input girme olanağı vermiyor. Benim aradığım sey klavye tuş vuruşunu algılayıp döngüyü durduracak bir komut.
tkinter dahil etmişsiniz. Hazırlayacağınız uygulama pencere arayüzlü olacaksa şayet programı durdurmak için bir buton oluşturarak ona atayacağınız fonksiyon ile döngüye harici müdahale edebilirsiniz.
Teşşekür ederim hocam ama sanırım benim algoritmayı değiştirmem gerekecek. Çünkü programın açık kalması gerekiyor. Sadece o döngüyü bitirmesi gerekiyor. Ben biraz daha kafa yorayım.
input() fonksiyonu arkaplanda bastığınız tuşları denetlemiyor, sadece konsola girdi girmenize olanak tanıyor. Yani istediğiniz şey için arkaplanda çalışan bir key listener kullanmalısnız.
pyautogui modülü sadece butonlara basmanızı sağlıyor, içerisinde bir key listener barındırmıyor. Butona basılıp basılmadığını kontrol etmek için pynput modülünü kullanmanızı tavsiye ederim. Buradan dökümantasyonuna ulaşabilirsiniz.
Sorunuza gelecek olursak, kodlar linear bir şekilde akarken bir kod tamamlanmadan bilgisayar diğer satıra geçmez. Yani bilgisayar oluşturduğunuz while True: döngüsüne gelince içerisinde bir break olmadığı için sonraki satırlara geçmeyecek. Sorununuzu çözmek için threading modülünden yararlanabilirsiniz.
Alttaki kodları incelemenizi ve bu konuda araştırma yapmanızı tavsiye ederim.
from pynput.keyboard import Listener
from pynput.keyboard import Key, Controller, KeyCode
from pyautogui import write
from threading import Thread
def sonlandir(key):
if isinstance(key, Key):
return
elif key.char == "q":
print("çıkılıyor..")
quit()
def programi_sonlandir():
with Listener(on_press=lambda tus: sonlandir(tus)) as denetleyici:
denetleyici.join()
def surekli_yaz():
while True:
write("a", interval=0.1)
Thread(target=programi_sonlandir).start()
Thread(target=surekli_yaz, daemon=True).start()
Evet, cunku while True asla bitmez. Icine bir kontrol + break veya daha iyisi True yerine bir kontrol koymak lazim. Tabi bu kontrolun sonucunu degistirecek durdur fonksiyonu nasil cagrilacak bilemiyorum.
Programin acik kalmasinin mantigi yok cunku o dongu disinda bir sey yapmiyor ama illa isteniyorsa alta ikinci bir sonsuz loop konabilir.