Python 使用tkinter输入绑定停止正在运行的函数
警告:使用单击功能运行下面的代码会使光标处于循环中,从而使程序无法停止 我正在尝试制作一个自动化程序,它接受一个文本文件并根据文本文件运行一个宏。 其思想是,您只需按下键绑定(在本例中为q),然后执行操作,但在尝试添加无限循环选项(目前缺少适当的UI,只能通过shell中的编辑访问)时,需要一种方法来通知函数(run)停止运行。我的计划是使用bool函数(Python 使用tkinter输入绑定停止正在运行的函数,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,警告:使用单击功能运行下面的代码会使光标处于循环中,从而使程序无法停止 我正在尝试制作一个自动化程序,它接受一个文本文件并根据文本文件运行一个宏。 其思想是,您只需按下键绑定(在本例中为q),然后执行操作,但在尝试添加无限循环选项(目前缺少适当的UI,只能通过shell中的编辑访问)时,需要一种方法来通知函数(run)停止运行。我的计划是使用bool函数(greenligth)来阻止代码运行,我认为这有点奇怪,所以当我在代码运行时按q键时,它会停止运行,但是在尝试这样做时,它只会使windows
greenligth
)来阻止代码运行,我认为这有点奇怪,所以当我在代码运行时按q键时,它会停止运行,但是在尝试这样做时,它只会使windows u无法执行此声音,程序会继续运行。下面的代码,很抱歉我对Python和英语两种语言的理解都很糟糕
正在馈送的.txt文件(data.txt
)为
这是一个不错的自动点击器,但这不是我想要的。
另外,在greenligth==true时去掉,并降低运行中的所有缩进,以正确地查看代码如何工作,而不会在尝试修复时出现混乱
import pyautogui
import time
import keyboard
import random
import win32api, win32con
from tkinter import *
import re
loopbool = False
running = False
greenlight = False
File = open("data.txt", "r")
if File.mode == "r":
myfile =File.read()
def Convert(string):
li = list(string.split(" "))
li = list(string.split("\n"))
return li
def Click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def Wait(x):
print(x)
time.sleep(x)
def DragClick(x,y,t):
pyautogui.dragTo(x, y, t)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def PressKey(key_name):
pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)
def LoopCheck(debug=None):
print(debug)
global running
global loopbool
global greenlight
print("here")
if loopbool == True and running == False:
while 1 == 1 and greenlight == True:
print("while loop")
run()
running = True
elif loopbool == False and running == False:
print("running not in loop")
greenlight = True
running = True
run()
else :
print("Off")
greenligth = False
def run(debug=None):
print(debug)
instruccions = Convert(myfile)
loop = 0
#testing some shit with loop shenanigans
while greenlight == True:
for x in instruccions:
if "1" in x or "2" in x or "3" in x or "4" in x or "5" in x or "6" in x or "7" in x or "8" in x or "9" in x or "0" in x:
x = list(x.split(","))
if x[0] == "CL":
xcords = (int(x[1]))
ycords = (int(x[2]))
Click(xcords,ycords)
elif x[0] == "ST":
TimeS = (int(x[1]))
Wait(TimeS)
elif x[0] == "DC":
xcords = (int(x[1]))
ycords = (int(x[2]))
timeS = (int(x[3]))
DragClick(xcords,ycords,timeS)
elif x[0] == "MC":
xcords = (int(x[1]))
ycords = (int(x[2]))
timeD = (int(x[3]))
pyautogui.dragTo(xcords, ycords, timeD)
elif "1" not in x:
x = list(x.split(","))
if x[0] == "CL":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0] == "PK":
for y in x[1]:
z = (x[1])
print(z)
#PressKey(x)
pyautogui.keyDown(z)
pyautogui.keyUp(z)
elif x[0] == "KU":
z = (x[1])
pyautogui.keyUp(z)
elif x[0] == "KD":
z = (x[1])
pyautogui.keyDown(z)
elif x[0] == "MU":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0] == "MD":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
else :
print(x[0])
else:
return()
File.close
window = Tk()
window.title("pain")
window.geometry('350x200')
#widgets
label = Label(window, text="fuck off")
label.grid(column=0, row=0)
button = Button(window, text="Click Me")
button = Button(window, text="Click Me", command=LoopCheck)
button.bind('<Enter>',LoopCheck)
button.grid(column=1, row=0)
#other shit
window.bind('q',LoopCheck)
window.mainloop()
导入pyautogui
导入时间
输入键盘
随机输入
导入win32api、win32con
从tkinter进口*
进口稀土
loopbool=False
运行=错误
绿灯=假
文件=打开(“data.txt”、“r”)
如果File.mode==“r”:
myfile=File.read()
def转换(字符串):
li=列表(string.split(“”)
li=列表(string.split(“\n”))
返回李
def单击(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
睡眠时间(0.1)
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTUP,0,0)
def等待(x):
打印(x)
时间。睡眠(x)
def DragClick(x,y,t):
pyautogui.dragTo(x,y,t)
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
睡眠时间(0.1)
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTUP,0,0)
def按键(按键名称):
pyautogui.keyDown(键名称)
pyautogui.keyUp(键名称)
def LoopCheck(调试=无):
打印(调试)
全球运行
全局环布尔
全球绿灯
打印(“此处”)
如果loopbool==True且running==False:
当1==1且绿灯==True时:
打印(“while循环”)
运行()
运行=真
elif loopbool==False和running==False:
打印(“不在循环中运行”)
绿灯=真
运行=真
运行()
其他:
打印(“关闭”)
格林利兹=假
def运行(调试=无):
打印(调试)
指令=转换(myfile)
循环=0
#用恶作剧测试一些狗屎
而绿灯==真:
对于说明中的x:
如果x中的“1”或x中的“2”或x中的“3”或x中的“4”或x中的“5”或x中的“6”或x中的“7”或x中的“8”或x中的“9”或x中的“0”:
x=列表(x.split(“,”))
如果x[0]=“CL”:
xcords=(int(x[1]))
ycords=(int(x[2]))
单击(XWord、YWord)
elif x[0]=“ST”:
时间=(int(x[1]))
等待(次)
elif x[0]=“DC”:
xcords=(int(x[1]))
ycords=(int(x[2]))
时间=(int(x[3]))
DragClick(xWord、yWord、timeS)
elif x[0]=“MC”:
xcords=(int(x[1]))
ycords=(int(x[2]))
timeD=(int(x[3]))
pyautogui.dragTo(xwords、ycords、timeD)
elif“1”不在x中:
x=列表(x.split(“,”))
如果x[0]=“CL”:
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0]=“主键”:
对于x[1]中的y:
z=(x[1])
打印(z)
#按键(x)
pyautogui.keyDown(z)
pyautogui.keyUp(z)
elif x[0]=“KU”:
z=(x[1])
pyautogui.keyUp(z)
elif x[0]=“KD”:
z=(x[1])
pyautogui.keyDown(z)
elif x[0]=“MU”:
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0]=“MD”:
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
其他:
打印(x[0])
其他:
返回()
File.close
window=Tk()
窗口标题(“痛苦”)
窗口几何(“350x200”)
#小部件
标签=标签(窗口,text=“滚开”)
label.grid(列=0,行=0)
按钮=按钮(窗口,text=“单击我”)
按钮=按钮(窗口,text=“单击我”,命令=循环检查)
按钮绑定(“”,循环检查)
button.grid(列=1,行=0)
#其他狗屎
window.bind('q',LoopCheck)
window.mainloop()
请将此代码减少到一个最小值。
import pyautogui
import time
import keyboard
import random
import win32api, win32con
from tkinter import *
import re
loopbool = False
running = False
greenlight = False
File = open("data.txt", "r")
if File.mode == "r":
myfile =File.read()
def Convert(string):
li = list(string.split(" "))
li = list(string.split("\n"))
return li
def Click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def Wait(x):
print(x)
time.sleep(x)
def DragClick(x,y,t):
pyautogui.dragTo(x, y, t)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def PressKey(key_name):
pyautogui.keyDown(key_name)
pyautogui.keyUp(key_name)
def LoopCheck(debug=None):
print(debug)
global running
global loopbool
global greenlight
print("here")
if loopbool == True and running == False:
while 1 == 1 and greenlight == True:
print("while loop")
run()
running = True
elif loopbool == False and running == False:
print("running not in loop")
greenlight = True
running = True
run()
else :
print("Off")
greenligth = False
def run(debug=None):
print(debug)
instruccions = Convert(myfile)
loop = 0
#testing some shit with loop shenanigans
while greenlight == True:
for x in instruccions:
if "1" in x or "2" in x or "3" in x or "4" in x or "5" in x or "6" in x or "7" in x or "8" in x or "9" in x or "0" in x:
x = list(x.split(","))
if x[0] == "CL":
xcords = (int(x[1]))
ycords = (int(x[2]))
Click(xcords,ycords)
elif x[0] == "ST":
TimeS = (int(x[1]))
Wait(TimeS)
elif x[0] == "DC":
xcords = (int(x[1]))
ycords = (int(x[2]))
timeS = (int(x[3]))
DragClick(xcords,ycords,timeS)
elif x[0] == "MC":
xcords = (int(x[1]))
ycords = (int(x[2]))
timeD = (int(x[3]))
pyautogui.dragTo(xcords, ycords, timeD)
elif "1" not in x:
x = list(x.split(","))
if x[0] == "CL":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0] == "PK":
for y in x[1]:
z = (x[1])
print(z)
#PressKey(x)
pyautogui.keyDown(z)
pyautogui.keyUp(z)
elif x[0] == "KU":
z = (x[1])
pyautogui.keyUp(z)
elif x[0] == "KD":
z = (x[1])
pyautogui.keyDown(z)
elif x[0] == "MU":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
elif x[0] == "MD":
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
else :
print(x[0])
else:
return()
File.close
window = Tk()
window.title("pain")
window.geometry('350x200')
#widgets
label = Label(window, text="fuck off")
label.grid(column=0, row=0)
button = Button(window, text="Click Me")
button = Button(window, text="Click Me", command=LoopCheck)
button.bind('<Enter>',LoopCheck)
button.grid(column=1, row=0)
#other shit
window.bind('q',LoopCheck)
window.mainloop()