Tkinter показывает и скрывает окно и возобновляет выполнение без разрушения в python? - PullRequest
0 голосов
/ 25 мая 2020

У меня есть сценарий python, который создает окно GUI с использованием Tkinter . После создания окна и чтения ввода я ожидаю, что выполнение перейдет к while l oop, но выполнение никогда не возобновится, поскольку окно не разрушено. Я хочу, чтобы он возобновился после прочтения ввода. Но здесь после отображения «Вы ввели xxxx» экран зависает, и выполнение никогда не возвращается к прежнему состоянию, пока l oop. Как это исправить? Я не хочу каждый раз создавать окно

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)

1 Ответ

0 голосов
/ 29 мая 2020

Вы можете скрыть окно tkinter с помощью window.wm_attributes("-alpha", 0) и показать с помощью window.wm_attributes("-alpha", 0.99). Этот код добавляет альфа-значение. Вот код, который лучше показывает это:

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()

Окно всегда активно, но не тогда, когда альфа-значение установлено на 0.

...