Python 线程和Tkinter不一起工作
试着用一个简单的自动点击器来练习Tkinter、Pyautogui和线程Python 线程和Tkinter不一起工作,python,multithreading,tkinter,keyboard,python-3.6,Python,Multithreading,Tkinter,Keyboard,Python 3.6,试着用一个简单的自动点击器来练习Tkinter、Pyautogui和线程 它应该打开一个菜单(检查) 然后选择按钮(检查) 它会打开另一个窗口(检查) 当您按F7时,它开始单击(不工作) 没有Tkinter,这个很好用 以下是代码: from tkinter import * from pyautogui import * from time import * from threading import Thread as th import keyboard root = Tk()
- 它应该打开一个菜单(检查)
- 然后选择按钮(检查)
- 它会打开另一个窗口(检查)
- 当您按F7时,它开始单击(不工作)
from tkinter import *
from pyautogui import *
from time import *
from threading import Thread as th
import keyboard
root = Tk()
key_loop = 1
k = ""
root.geometry("150x500")
def detect_key_def():
global k
while key_loop == 1:
if keyboard.is_pressed('f7'):
k = "f7"
elif keyboard.is_pressed("f8"):
k = "f8"
elif keyboard.is_pressed("f9"):
k = "f9"
detect_key = th(target=detect_key_def)
detect_key.start()
def clicker():
clicker = Tk()
root.geometry("300x300")
Label(clicker, text="Start - F7\n\nStop - F8").pack()
Button(clicker, text="Exit", command =clicker.destroy).pack()
if k == "f7":
click()
t.sleep(0.01)
elif k == "f8":
t.sleep(0.01)
clicker.mainloop()
Button(root, text="Auto Clicker", command=clicker).pack()
root.mainloop()
当我运行代码时,F7启动器不工作。有什么想法吗?好的,根据您对代码所做的尝试,最好在这里使用
after()
而不是线程。Tkinter始终监视所有按键,因此您可以将F7
按钮绑定到顶层窗口
下面的代码将F7
绑定到clicker toplevel窗口。当您在toplevel中单击以获得焦点时,您可以使用F7
启动自动单击。我把它设置为每秒点击1次
import tkinter as tk
from pyautogui import click
root = tk.Tk()
key_loop = 1
root.geometry("150x500")
def click_loop(event=None):
click()
root.after(100, click_loop)
def clicker():
clicker = tk.Toplevel(root)
root.geometry("300x300")
tk.Label(clicker, text="Start - F7\n\nStop - F8").pack()
tk.Button(clicker, text="Exit", command =clicker.destroy).pack()
clicker.bind("<F7>", click_loop)
tk.Button(root, text="Auto Clicker", command=clicker).pack()
root.mainloop()
将tkinter作为tk导入
从pyautogui导入中,单击
root=tk.tk()
键循环=1
根几何(“150x500”)
def点击循环(事件=无):
单击()
root.after(100,单击\u循环)
def clicker():
clicker=tk.Toplevel(根目录)
根几何(“300x300”)
tk.Label(clicker,text=“Start-F7\n\nStop-F8”).pack()
按钮(clicker,text=“Exit”,command=clicker.destroy).pack()
clicker.bind(“,click\u循环)
按钮(root,text=“Auto Clicker”,command=Clicker).pack()
root.mainloop()
Pro提示。不要导入*
。您可能会覆盖其他导入并导致代码出现问题。改为像导入tkinter as tk那样导入,以防止库中重写方法出现任何问题。确定即可。感谢您我看到了这一点并修复了Sleep我认为您需要使用Tkinter中的after()
方法来管理您需要使用的任何计时。线程是一个选项,但可能比您在这里需要的高级一点。@Mike SMT实际上,虽然通常不建议不要使用import*
,但在本例中,中的示例使用了它,这就是为什么在使用tkinter
时这样做非常流行的原因。