Tkinter gui 不工作鼠标和键盘模块
Tkinter gui doesn't work Mouse and keyboard modules
我试图使用鼠标和键盘模块和 tkinter 作为 gui 制作一个自动点击器并编写了这段代码
#Import
import tkinter as tk
import random as r8
import keyboard as kb
import mouse as ms
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
self.joesd()
def create_widgets(self):
self.joe = tk.Frame(self)#main frame
self.joe.pack(fill=tk.BOTH)
self.lbl = tk.Label(self.joe, text='Example text', height=5, width=30)
self.lbl.pack(side="top")# where the label will be located
self.lb = tk.Label(self.joe, text='Example Text', height=5, width=35)
self.lb.pack(side="top")# where the label will be located
def joesd(self):
while True:
if kb.is_pressed('q') == True:
ms.press('left')
ms.release('left')
root = tk.Tk()
app = Application(master=root)
app.mainloop()
然后我注意到 gui 从未出现,但如果我删除它就会出现
def joesd(self):
while True:
if kb.is_pressed('q') == True:
ms.press('left')
ms.release('left')
我该怎么办?
GUI 不显示的原因是在代码命中 mainloop()
之前它进入了无限循环(while
循环)并且它无法到达 mainloop
因此 window 不显示并且不处理事件。所以你应该做的是摆脱while
。一种方法是使用 after()
方法来模拟 while
.
def joesd(self):
if kb.is_pressed('q'):
ms.press('left')
ms.release('left')
self.after(100,self.joesd)
这将每 100 毫秒重复一次该功能,您也可以将其减少到 1 毫秒。但请确保系统无法处理。
您不应在 tkinter 应用程序中使用 while 循环。您可以使用 kb.on_press_key()
注册回调:
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
...
#self.joesd() # <- not necessary
kb.on_press_key("q", self.on_key_press)
...
def on_key_press(self, event):
#print("q pressed", event)
ms.press('left')
ms.release('left')
# above two lines can be replaced by ms.click('left')
我试图使用鼠标和键盘模块和 tkinter 作为 gui 制作一个自动点击器并编写了这段代码
#Import
import tkinter as tk
import random as r8
import keyboard as kb
import mouse as ms
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
self.joesd()
def create_widgets(self):
self.joe = tk.Frame(self)#main frame
self.joe.pack(fill=tk.BOTH)
self.lbl = tk.Label(self.joe, text='Example text', height=5, width=30)
self.lbl.pack(side="top")# where the label will be located
self.lb = tk.Label(self.joe, text='Example Text', height=5, width=35)
self.lb.pack(side="top")# where the label will be located
def joesd(self):
while True:
if kb.is_pressed('q') == True:
ms.press('left')
ms.release('left')
root = tk.Tk()
app = Application(master=root)
app.mainloop()
然后我注意到 gui 从未出现,但如果我删除它就会出现
def joesd(self):
while True:
if kb.is_pressed('q') == True:
ms.press('left')
ms.release('left')
我该怎么办?
GUI 不显示的原因是在代码命中 mainloop()
之前它进入了无限循环(while
循环)并且它无法到达 mainloop
因此 window 不显示并且不处理事件。所以你应该做的是摆脱while
。一种方法是使用 after()
方法来模拟 while
.
def joesd(self):
if kb.is_pressed('q'):
ms.press('left')
ms.release('left')
self.after(100,self.joesd)
这将每 100 毫秒重复一次该功能,您也可以将其减少到 1 毫秒。但请确保系统无法处理。
您不应在 tkinter 应用程序中使用 while 循环。您可以使用 kb.on_press_key()
注册回调:
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
...
#self.joesd() # <- not necessary
kb.on_press_key("q", self.on_key_press)
...
def on_key_press(self, event):
#print("q pressed", event)
ms.press('left')
ms.release('left')
# above two lines can be replaced by ms.click('left')