Tkinter在python中显示和隐藏窗口并在不破坏的情况下恢复执行?

Tkinter在python中显示和隐藏窗口并在不破坏的情况下恢复执行?,python,python-3.x,python-2.7,tkinter,Python,Python 3.x,Python 2.7,Tkinter,我有一个python脚本,它使用Tkinter创建GUI窗口。在创建窗口并读取输入之后,我希望执行继续到while循环,但是由于窗口没有被破坏,执行永远不会恢复。我希望它在读取输入后恢复。但在这里显示“youenteredxxxx”后,屏幕冻结,执行永远不会回到前一个while循环。我该如何解决这个问题?我不想每次都创建窗口 from PIL import ImageGrab, Image from glob import glob from io import BytesIO import t

我有一个python脚本,它使用Tkinter创建GUI窗口。在创建窗口并读取输入之后,我希望执行继续到while循环,但是由于窗口没有被破坏,执行永远不会恢复。我希望它在读取输入后恢复。但在这里显示“youenteredxxxx”后,屏幕冻结,执行永远不会回到前一个while循环。我该如何解决这个问题?我不想每次都创建窗口

from PIL import ImageGrab, Image
from glob import glob
from io import BytesIO
import time
import tkinter as tk

window = None
entry = None
window_created = False
x = None
name_of_file = None
input_wait = False

def handle_click(event):
    global name_of_file
    name_of_file = entry.get()
    print("You Entered " + name_of_file)
    entry.delete(0, tk.END)
    hide_window(window)


def show_window(window):
    window.update()
    window.deiconify()


def hide_window(window):
    window.update()
    window.withdraw()


def create_window():
    global window
    global entry
    window = tk.Tk()
    window.geometry("600x600")
    window.title("Name for your image")
    label = tk.Label(text="What do you want to name the image?")
    entry = tk.Entry()
    button = tk.Button(text="Create")
    button.bind("<Button-1>", handle_click)
    window.bind("<Return>", handle_click)
    label.pack()
    entry.pack()
    button.pack()
    window.mainloop()


while True:
    print("Looping")
    image_list = map(Image.open, glob('*.png'))
    presentItem = ImageGrab.grabclipboard()
    if presentItem is not None:
        with BytesIO() as f:
            presentItem.save(f, format='PNG')
            x = Image.open(f)
            if x not in image_list:
                print("New item found")
                if not window_created:
                    create_window()
                    window_created = True
                    print("Resumes")
                else:
                    show_window(window)
                    print("Resumes")
                presentItem.save(name_of_file + '.png', 'PNG')
    else:
        print("No item in clipboard")
    time.sleep(0.1)
从PIL导入图像抓取,图像
从全局导入全局
从io导入字节io
导入时间
将tkinter作为tk导入
窗口=无
条目=无
创建的窗口=False
x=无
文件的名称=无
输入\等待=错误
def句柄_单击(事件):
\u文件的全局名称\u
文件的名称=entry.get()
打印(“您输入”+文件名)
entry.delete(0,tk.END)
隐藏窗口(窗口)
def显示窗口(窗口):
window.update()
window.deiconify()
def隐藏窗口(窗口):
window.update()
window.draw()
def create_window():
全局窗口
全球进入
window=tk.tk()
窗口几何图形(“600x600”)
window.title(“图像名称”)
label=tk.label(text=“您想给图像命名什么?”)
entry=tk.entry()
按钮=tk.按钮(text=“创建”)
按钮。绑定(“,句柄\单击)
window.bind(“,句柄\单击)
label.pack()
entry.pack()
button.pack()
window.mainloop()
尽管如此:
打印(“循环”)
image_list=map(image.open,glob('*.png'))
presentItem=ImageGrab.grabclipboard()
如果presentItem不是None:
将BytesIO()作为f:
presentItem.save(f,format='PNG')
x=图像。打开(f)
如果x不在图像列表中:
打印(“找到新项目”)
如果未创建窗口,请执行以下操作:
创建_窗口()
创建的窗口=真
打印(“简历”)
其他:
显示窗口(窗口)
打印(“简历”)
presentItem.save(文件名“+”.png“,”png“)
其他:
打印(“剪贴板中没有项目”)
睡眠时间(0.1)

您可以使用
window.wm\u属性(“-alpha”,0)
隐藏tkinter窗口,并使用
window.wm\u属性(“-alpha”,0.99)
显示。此代码添加一个alpha值。有一个代码可以更好地显示:

import time
from tkinter import *

tk = Tk()

def more_alpha():
    global alpha
    alpha += 0.05
    if alpha >= 1:
        alpha = 0.99
    update()

def less_alpha():
    global alpha
    alpha -= 0.05
    if alpha <= 0:
        alpha = 0.01
    update()

def update():
    global alpha
    tk.wm_attributes("-alpha", alpha)

alpha = 0.5
update()

Button(tk, text="More visibility", command=more_alpha).grid(padx=25, pady=5)
Button(tk, text="Less visibility", command=less_alpha).grid(padx=25, pady=5)

tk.mainloop()
导入时间
从tkinter进口*
tk=tk()
def more_alpha():
全球阿尔法
α+=0.05
如果α>=1:
α=0.99
更新()
def less_alpha():
全球阿尔法
α-=0.05

如果alpha将您的
替换为
,而…
替换为
之后(…
)。在之后阅读这件事不会真正起作用,因为这里我只想在输入后恢复执行。如果我不想每次都创建窗口呢?我只想创建一次以下两种方式:1.使用OOP来执行,重构代码。这将只创建一次(参考如何使用after方法)2.仍然使用
while
循环,但每次都需要创建它。after无法真正工作…resume…only…输入:您可以根据需要经常中断/恢复after\u循环函数。break:不要调用
。after(…
再次调用。resume:再次调用after\u循环函数。