【发布时间】:2021-08-01 17:40:22
【问题描述】:
我正在尝试制作一个按钮来停止我的线程,其中有一段时间,但我不太确定如何这样做。我基本上只需要停止 while 语句,但我不确定找到停止线程的方法是更好的选择,还是尝试做一些可以停止线程中的 while 的事情,比如使用热键并使用停止按钮pyautogui 按下该热键。我刚开始学习这一切,所以请多多包涵。也非常感谢对我的代码的任何改进! (忽略我的停止按钮命令所说的内容。我只是将它复制并粘贴到那里,看看按钮是否会出现,它确实出现了)
from tkinter import *
from poke import start
import pyautogui
import sys
import threading
myWindow = Tk()
myWindow.title("TFT Bot")
myWindow.configure(background="#EEEEEE")
Label(myWindow, text="TFT Bot", bg="#EEEEEE", fg="#555555", font="Times 20 bold underline").pack()
myWindow.geometry("600x400+200+250")
exitbutton = Button(myWindow, text="Exit", command=myWindow.destroy)
exitbutton.place(x=285,y=100)
startbutton = Button(myWindow, text="Start", command=lambda:threading.Thread(target=start).start())
startbutton.place(x=260,y=200)
stopbutton = Button(myWindow, text="Stop", command=lambda:threading.Thread(target=start).start())
stopbutton.place(x=360,y=400)
startbutton.pack()
stopbutton.pack()
exitbutton.pack()
myWindow.mainloop()
我的开始功能:
from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con
import sys
def start():
while keyboard.is_pressed('q') == False:
#PLAY
play = pyautogui.locateCenterOnScreen('./images/play.png', confidence = 0.8)
if play:
print ("clicking play")
pyautogui.moveTo(play)
time.sleep(1)
pyautogui.click(play, clicks=2, interval=1)
time.sleep(0.05)
然后它只是一堆看起来类似于第一个 if 语句的行
【问题讨论】:
-
您需要使用
command=lambda:threading.Thread(target=start).start()将函数作为命令参数传递。否则它将在您单击按钮之前执行该行(在启动时)。你也没有定义任何启动功能。也没有必要说from pyautogui import *和import pyautogui,因为你会像这样导入它两次(只使用一个而不是两个)。 -
@sputnick567 实际上启动函数是在
from poke import start中定义的,但我认为 OP 也应该提供有关该启动函数的信息。 -
@Xitiz 是的,谢谢你没看到。
-
@hwangsa 现在我很困惑你的主要问题是什么?因为您的代码中有多个问题。请准确地说出,如果可能的话,简而言之,您的确切问题是什么?
-
@xitiz 我只是想知道一种方法,我可以编写我的停止按钮来停止来自我的开始按钮的线程。