Лишнее окно tkinter, как избавиться?
Имеется код:
# Привет Мир
import tkinter
def f1(my_string):
def my_printing(word):
print(word)
root.destroy()
button_names = my_string.split()
root = tkinter.Tk()
root.attributes('-topmost', True)
for i in button_names:
button = tkinter.Button(master=root, text=i, command=lambda i = i: my_printing(i))
button.pack()
root.mainloop()
tkinter.Tk().withdraw() #выключаем окно
my_string = tkinter.Tk().clipboard_get() #получаем строку из буфера обмена
if 'Привет' in my_string:
f1(my_string)
Если в буфер обмена попадает фраза "Привет Мир", то должно создаваться окно с кнопками "Привет" и "Мир". При выполнении вышеуказанного кода появляется окно с кнопками на переднем плане и лишнее пустое окно tkinter. Как сделать так, чтобы пустое окно не появлялось? Пытался воспользоваться конструкцией tkinter.Tk().withdraw():
- После импорта библиотеки - не помогло;
- Внутри функции - не помогло;
- Команда root.withdraw() выключает само окно root.
Ответы (1 шт):
Каждый вызов tkinter.Tk() создает новый объект окна. Одно окно вы создали и сразу скрыли, потом создали еще одно пустое окно в вызове tkinter.Tk().clipboard_get(), а потом еще третье в функции f1. Итого получается одно скрытое окно и два видимых.
Нужно создать одно окно, скрыть его, проверять состояние буфера обмена через root.after, потом отобразить скрытое окно с нужной информацией в функции f1:
import tkinter
def f1(my_string):
def my_printing(word):
print(word)
root.destroy()
button_names = my_string.split()
root.attributes('-topmost', True)
for i in button_names:
button = tkinter.Button(master=root, text=i, command=lambda i = i: my_printing(i))
button.pack()
root.deiconify() # Отображаем окно
def check_clipboard():
# Проверяем состояние буфера обмена
try:
my_string = root.clipboard_get() #получаем строку из буфера обмена
except tkinter.TclError: # Если буфер обмена пуст, вылетает исключение TclError
my_string = ""
if 'Привет' in my_string:
f1(my_string)
else:
root.after(100, check_clipboard) # Перепроверить через 100 миллисекунд
root = tkinter.Tk()
root.withdraw() # скрываем окно
check_clipboard() # Периодически проверяем состояние буфера обмена
root.mainloop()