我正在制作一個 tkinter 程式,并希望檢測按鍵并在有按鍵時執行某些操作,但是如果沒有按鍵,keyboard.read_key() 將不會執行并且不會讓任何其他代碼運行,直到按鍵被按下。
有沒有我可以使用的替代方法或檢查是否沒有按下任何鍵的方法?
def on_press():
global running
global turn
if keyboard.read_key() == 'q':
ws.destroy()
elif keyboard.read_key() == 'a':
if turn:
print('turning off')
running = False
turn = False
else:
print('turning on')
running = True
turn = True
start()
else:
start()
def start():
global running
global turn
print('start')
if running:
print('clicking')
mouse.click(Button.left, cps_val)
time.sleep(1)
on_press()
on_press()
uj5u.com熱心網友回復:
關鍵是no pressed大部分時間。因為計算機速度快而人類速度慢所以我會假設那個鍵是no pressed在開始時我會立即運行代碼(而不檢查它是否no pressed)。而且我會在開始時一直運行“點擊代碼” while,并且我只會使用鍵來暫停這個回圈(key a)或退出這個回圈(key q)——而不檢查 key 是否為no pressed。
import keyboard
#import mouse
import time
# --- functions ---
def pause():
global turn
if turn:
print('turning off')
turn = False
else:
print('turning on')
turn = True
def finish():
global running
running = False
def main():
global counter
print('start')
while running:
if turn:
counter = 1
print('clicking', counter)
#mouse.click(Button.left, cps_val)
time.sleep(1)
# --- main ---
turn = True
running = True
counter = 0
keyboard.add_hotkey('q', finish)
keyboard.add_hotkey('a', pause)
main()
如果它必須運行,tkinter則while回圈將阻塞tkinter(tkinter將凍結,因為它沒有時間從系統獲取鍵/滑鼠事件,將它們發送到小部件,更新小部件,并在視窗中重繪小部件)。
我會使用而不是并且tkinter.after(milliseconds, function)將sleep()有時間作業。whiletkinter
import tkinter as tk
import keyboard
#import mouse
import time
# --- functions ---
def pause():
global turn
if turn:
print('turning off')
turn = False
else:
print('turning on')
turn = True
def finish():
global running
running = False
root.destroy()
def main():
print('start')
loop() # run first time at once
#root.after(1000, loop) # run first time after 1s
def loop():
global counter
if turn:
counter = 1
#print('clicking', counter)
label['text'] = f'clicking {counter}'
#mouse.click(Button.left, cps_val)
if running:
root.after(1000, loop) # run again after 1s
# --- main ---
turn = True
running = True
counter = 0
keyboard.add_hotkey('q', finish)
keyboard.add_hotkey('a', pause)
root = tk.Tk()
label = tk.Label(root, text='clicking 0')
label.pack()
main()
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504269.html
上一篇:如何驗證條目小部件?Python
