Подтвердить что ты не робот

Удаление значка TK в окне Tkinter

Кто-нибудь знает, как заставить значок не отображаться? Я ищу способ вообще не иметь иконки.

4b9b3361

Ответ 1

В Windows

Шаг первый:

Создайте прозрачный значок, используя либо редактор значков, либо сайт, например rw-designer. Сохраните его как 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.

Ответ 2

Подобно принятому ответу (с неудобством):

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\[email protected]\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 можно сократить еще больше благодаря @Magnus Hoff:

import base64, zlib

ICON = zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
    'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))

Ответ 3

Насколько я знаю, ближе всего к значку "пустой" используется тот, который имеет тот же цвет, что и заголовок окна. Но опять же много пользователей используют разные цветовые темы, поэтому они не будут работать очень хорошо.

Однако, если вы используете py2exe, вы можете использовать что-то вроде Resource Hacker для замены значка. Но в текстовом состоянии программ python лучшее, что вы можете сделать, это заменить. В зависимости от того, как файлы Jar используют значок java, приложения tkinter будут иметь значок TK. В конце концов... как java, ваше приложение переводится промежуточной программой. Поскольку другая программа запускает ваш код, вам нужно изменить эту другую программу. К счастью, python/tk немного более гибкий, чем JVM с точки зрения значков, поэтому вы можете заменить значок. Но удаление его полностью в настоящее время не является вариантом.

-Джон

Ответ 4

Основываясь на предыдущих ответах, я использовал это решение:

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

Ответ 5

Обновление:

Немного измененный код (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, это прекрасно работает, создавая желаемый значок "no icon" для вашего нового приложения.

Однако, на Python 3.6, Win 8.1, это затмевает GUI, который, как я думаю, связан с новым Tk 8.6, и хотя я обнаружил, что новая нотация 8.6 использования wm_iconphoto() в этом случае проходит без помех:/p >

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?