Замораживание окон Ткинтер - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь создать ИИ (он может захватить мышь), который победит в игре 'Wha c -A-Mole'. Все работает нормально, но когда я конвертирую его в exe, я не могу это остановить. Я пытаюсь создать приложение Tkinter, которое может запускать и останавливать AI по запросу пользователя. Программа может запустить ИИ, и чтобы завершить его, вам просто нужно закрыть окно. За исключением того, что окно останавливается после запуска ИИ, и я не могу закрыть окно Tkinter, то есть ИИ не остановится. Вот мой код:

from ctypes import windll
import tkinter as tk
from tkinter import ttk
from pynput.mouse import Controller
from pynput.mouse import Button, Controller
import time
import webbrowser
from tkinter import messagebox
from tkinter import *

def callback():
    if messagebox.askokcancel("Quit", "Are you sure you want to quit this VERY SMART AI?"):
        stop = 2
        print('yeah')
        window.destroy()


def start():   
    hdc = windll.user32.GetDC(0)
    mouse = Controller()
    webbrowser.open('https://www.classicgame.co.uk/game/Whack+a+Mole#')
    time.sleep(5)
    def wait_until(x, y, operation, colour, wait):
        hdc = windll.user32.GetDC(0)
        if operation == '!':
            while windll.gdi32.GetPixel(hdc, x, y) != colour:
                time.sleep(wait)
        if operation == '=':
            while windll.gdi32.GetPixel(hdc, x, y) == colour:
                time.sleep(wait)

    def click_on(x, y, wait):
        mouse.position = (x, y)
        mouse.click(Button.left, 1)
        time.sleep(wait)

    wait_until(601, 555, '!', 107614, 1)

    time.sleep(10)
    mouse.scroll(0, -13)
    time.sleep(1)

    click_on(597, 410, 0)

    wait_until(1030, 560, '=', 3156775, 2)

    time.sleep(10)
    mouse.position = (1030, 560)
    time.sleep(0.5)
    mouse.click(Button.left, 1)

    wait_until(657, 401, '!', 16777215, 1)

    click_on(652, 390, 1)

    click_on(568, 525, 1)

    click_on(687 ,460, 0)

    start = time.time()
    end = start + 60


    x_pos = [420, 570, 715, 420, 570, 715, 420, 570, 715,]
    y_pos = [310, 310, 310, 435, 435, 435, 560, 560, 560]
    colour_mole = [15263718, 10277608]

    time.sleep(1)


    while time.time() <= end or stop == 1:
        for x in x_pos:
            for y in y_pos:
                if windll.gdi32.GetPixel(hdc, x, y) in colour_mole:
                    mouse.position = (x, y)
                    mouse.click(Button.left, 1)

window = tk.Tk()
window.title("AI")
label = ttk.Label(window, text="Welcome to my Whac-A-Mole AI!")
label2 = ttk.Label(window, text="Press ESC to exit the program")
btn = ttk.Button(window, text="Start", command = start)
btn.grid(row=2, column=0)
label.grid(row=0, column=0)
label2.grid(row=1, column=0)


window.protocol("WM_DELETE_WINDOW", callback)

window.mainloop()

Может кто-нибудь объяснить, почему он зависает и как я могу его решить? Или, может быть, кто-то может сказать мне другой способ остановить ИИ. Я пытался остановить код при нажатии клавиши «ES C», но это не сработало.

...