Tkinter - 如果使用 if __name__ == '__main__': quit() 关闭,但其他情况下不关闭

0 投票
1 回答
52 浏览
提问于 2025-04-14 15:31

我的Tkinter代码:

from tkinter import Tk, Label, Entry, Button, END
from PIL import ImageTk, Image

class InputWindow():
    def __init__(self, *args, **kwargs):
        self.root = Tk()
        self.root.title('Image Captcha')
        self.root.configure(background='#ffe75c')
        # Initializing the Variables to be defined later
        image_label = Label(self.root)

        # Defining the Input Box and placing it in the window
        self.entry = Entry(self.root, width=10, borderwidth=5, font="Arial 15", justify="center")
        self.entry.grid(row=2, column=0)

        # Removing the contents of the input box.
        self.entry.delete(0, END)
        image_url = kwargs.get('captcha')
        im = Image.open(requests.get(image_url, stream=True, timeout=5).raw)
        image_display = ImageTk.PhotoImage(im, master=self.root)
        # Removing the previous Image (if present) and
        # displaying a new one.
        image_label.grid_forget()
        image_label = Label(self.root, image=image_display)
        image_label.grid(row=1, column=0, columnspan=2, padx=10)  

        # Defining the submit button
        submit_button = Button(self.root, text="Submit", font="Arial 10", command=lambda: self.get())
        submit_button.grid(row=3, column=0, columnspan=2, pady=10)

        self.root.mainloop()   

    def get(self):
        if self.entry.get():
            text = self.entry.get()
            self.root.quit()
            return text
        self.root.quit()
        return False

我在我的函数里这样调用它:

solver = InputWindow(captcha = img_link)
captcha_str = solver.get()
solver.root.destroy()

这样运行的时候是没问题的,窗口会在我使用以下代码时关闭:

if __name__ == '__main__': 

但是,当我从另一个函数运行它时,窗口却一直存在,无法关闭。我希望在我输入完文本后,窗口能够关闭。我把quit()换成了destroy(),但还是没有成功。

希望能得到一些帮助。感谢你的关注和时间。

OZooHA

1 个回答

0

这个答案是说,在captcha_str之后加一行代码,用来关闭窗口:

solver = InputWindow(captcha = img_link)
captcha_str = solver.get()
solver.root.destroy()

撰写回答