Вопрос:

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

python python-3.x tkinter tk

33633 просмотра

6 ответа

59674 Репутация автора

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

Автор: Evan Fosmark Источник Размещён: 15.02.2009 12:27

Ответы (6)


2 плюса

20450 Репутация автора

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

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

-John

Автор: John T Размещён: 15.02.2009 12:38

39 плюса

34830 Репутация автора

Решение

На винде

Первый шаг:

Создайте прозрачную иконку с помощью редактора иконок или сайта, такого как 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иконки.

Автор: Stobor Размещён: 16.04.2009 04:11

10 плюса

5767 Репутация автора

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

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='))
Автор: ubomb Размещён: 16.08.2013 03:48

2 плюса

21 Репутация автора

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

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()
Автор: Dario Garcia Размещён: 01.06.2016 10:47

0 плюса

527 Репутация автора

Обновить:

Слегка измененный код ( 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, см. Ниже) - с использованием blank()метода PhotoImage :

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?

Автор: Jay Размещён: 08.04.2017 05:39

0 плюса

28 Репутация автора

Альтернатива решению @ 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

Автор: shbooms Размещён: 14.10.2018 03:02
Вопросы из категории :
32x32