Вопрос

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

Это было полезно?

Решение

В 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.ссылка на организацию для получения более подробной информации:

http://effbot.org/tkinterbook/photoimage.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top