Удаление значка TK в окне Tkinter - PullRequest
22 голосов
/ 15 февраля 2009

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

Ответы [ 6 ]

39 голосов
/ 16 апреля 2009

в 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.

10 голосов
/ 16 августа 2013

Аналогично принятому ответу (с мнимой константой):

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

import base64, zlib

ICON = zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
    'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))
2 голосов
/ 01 июня 2016

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

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()
2 голосов
/ 15 февраля 2009

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

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

-John

0 голосов
/ 14 октября 2018

Альтернатива решению @ 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.org ссылка для более подробной информации:

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

0 голосов
/ 08 апреля 2017

Обновление:

Слегка измененный код (выражение 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 это приводит к застреванию GUI, который, я думаю, связан с более новым Tk 8.6, и хотя я обнаружил, что новая нотация 8.6 с использованием wm_iconphoto() действительно проходит без помех в этом случае:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...