Удаление значка TK в окне Tkinter
-
23-08-2019 - |
Вопрос
Кто-нибудь знает, как сделать так, чтобы иконка не отображалась?Я ищу способ вообще не иметь значка.
Решение
В Windows
Шаг Первый:
Создайте прозрачный значок, используя либо редактор значков, либо такой сайт, как rw-дизайнер.Сохраните его как transparent.ico
.
Шаг Второй:
from tkinter import *
tk = Tk()
tk.iconbitmap(default='transparent.ico')
lab = Label(tk, text='Window with transparent icon.')
lab.pack()
tk.mainloop()
В Unix
Нечто подобное, но с использованием xbm
икона.
Другие советы
Аналогично принятому ответу (с той лишь разницей, что он более уродливый):
import tkinter
import tempfile
ICON = (b'\x00\x00\x01\x00\x01\x00\x10\x10\x00\x00\x01\x00\x08\x00h\x05\x00\x00'
b'\x16\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00 \x00\x00\x00\x01\x00'
b'\x08\x00\x00\x00\x00\x00@\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x01\x00\x00\x00\x01') + b'\x00'*1282 + b'\xff'*64
_, ICON_PATH = tempfile.mkstemp()
with open(ICON_PATH, 'wb') as icon_file:
icon_file.write(ICON)
tk = tkinter.Tk()
tk.iconbitmap(default=ICON_PATH)
label = tkinter.Label(tk, text="Window with transparent icon.")
label.pack()
tk.mainloop()
Вместо этого он просто создает файл "на лету", так что вам не нужно носить с собой дополнительный файл.Используя тот же метод, вы также могли бы создать значок '.xbm' для Unix.
Редактировать:В ICON
может быть сокращен еще больше благодаря @Магнус Хофф:
import base64, zlib
ICON = zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))
Насколько я знаю, самое близкое, что вы получите к "пустому" значку, - это использовать значок того же цвета, что и строка заголовка окна.Но опять же, многие пользователи используют разные цветовые темы, так что это пройдет не очень хорошо.
Однако, если вы используете py2exe, вы можете использовать что-то вроде Хакер ресурсов чтобы поменять значок местами.Но в текстовом состоянии программ python лучшее, что вы можете сделать, это заменить.Подобно тому, как файлы Jar используют значок java, приложения tkinter будут иметь значок TK.В конце концов...как и Java, ваше приложение переводится промежуточной программой.Поскольку другая программа выполняет ваш код, вы должны изменить эту другую программу.К счастью, python / tk немного более гибкий, чем JVM, с точки зрения значков, поэтому вы можете заменить значок.Но полностью удалить его в настоящее время невозможно.
-Джон
Основываясь на предыдущих ответах, я использовал это решение:
from PIL import ImageTk
import zlib,base64
import Tkinter
icon=zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))
root=Tkinter.Tk()
image=ImageTk.PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, image)
root.mainloop()
Обновить:
Слегка измененный код (try
предложение вместо if TkVersion
) создает прозрачный (без) значок на:
Linux (Mint 18.1), Python 2.7
Linux (Mint 18.1), Python 3.5.1
Windows 10, Python 2.7.13
Он выдает черный значок (не работает) на:
Windows 8.1, Python 3.6
Довольно старый вопрос, но решения у меня не работали.Я нашел частичное простое решение с моим собственным последующим вопросом.
Частичное решение (Tk 8.5, см. Ниже) - использование PhotoImage blank()
способ:
from Tkinter import *
root=Tk()
icon=PhotoImage(height=16, width=16)
icon.blank()
root.tk.call('wm', 'iconphoto', self.master._w, icon)
root.mainloop()
На Python 2.7, Windows 10 это работает нормально, создавая желаемый значок "без значка" для вашего нового приложения.
Однако на Python 3.6, Win 8.1 это приводит к блокировке графического интерфейса, который, я думаю, связан с более новым Tk 8.6, и хотя я обнаружил, что новая нотация 8.6 для использования wm_iconphoto()
проходит ли unjammed в этом случае:
try:
from tkinter import *
except:
from Tkinter import *
root=Tk()
#Identical for Py2.7/Tk8.5 and Py3.5/Tk8.6
icon=PhotoImage(height=16, width=16)
icon.blank()
#Picking a notaion based on Tk version to avoid jamming
try:
root.wm_iconphoto('True', icon) #New Tk 8.6 style
else:
#Jams Python 3.5 with Tk 8.6 on Windows
root.tk.call('wm', 'iconphoto', self.master._w, icon)
root.mainloop()
Это создает черный значок на 3.6 вместо прозрачного в случае 2.7 / 8.5.
Возможно, есть способ сделать пиксели прозрачными один за другим, используя "набор прозрачности". - http://wiki.tcl.tk/1449
Однако я не знаю, возможно ли это вообще через Tkinter.Бог благоволит смелым, хотя очередь за кем-то другим?
Обновленный вопрос:Почему это не работает на Py3.6 / Windows?
Альтернатива решению @ubomb для добавления пользовательских изображений путем использования Tkinter.PhotoImage
встроенная поддержка обработки .gif
Изображения.
Из файла:
icon = Tkinter.PhotoImage(file="logo.gif")
из base64:
gif_base64_string = """
R0lGODdhEAAQAIcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O
Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh
...
4B8AAP9Ci/4HoLTpfwD+qV4NoHVAADs=
"""
icon = Tkinter.PhotoImage(data=gif_base64_string)
effbot.ссылка на организацию для получения более подробной информации: