如何解决定义窗口并添加mainloop后,Tkinter窗口未打开
import win32api,win32com
import pyautogui
import tkinter as tk
from time import sleep
import keyboard
win = tk.Tk()
cursor = (0,0)
di = 0
e = tk.Entry()
def geti():
di = float(e.get())
l = tk.Label(text="Info:").pack()
l1 = tk.Label(text="Press q to stop clicking").pack()
l2 = tk.Label(text="Press c to copy mouse position to execute on").pack()
l3 = tk.Label(text="Press e to start executing").pack()
dl = tk.Label(text="Delay between eack click (s)").pack()
e.pack()
b = tk.Button(text="save delay time",command=geti).pack()
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0)
sleep(di)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0)
while True:
if(keyboard.is_pressed('c') == True):
cursor = pyautogui.position()
if(keyboard.is_pressed('q') == True):
break
if(keyboard.is_pressed('e') == True):
click(cursor[0],cursor[1])
win.mainloop()
解决方法
您的while循环块win.mainloop()。 无需检查按键,您可以将tkinters事件系统与bind一起使用:
win.bind('key',callback)
# thanks to @acw1668's comment: added evt
win.bind('e',lambda evt: click(cursor[0],cursor[1]))
lambda是必需的,因为您希望调用函数而不是结果。来自the tkinter docs:
如果这样做,Python将在创建之前调用回调函数 小部件,然后将函数的返回值传递给Tkinter。 Tkinter 然后尝试将返回值转换为字符串,并告诉Tk 激活按钮后,使用该名称调用一个函数。这是 可能不是您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。