2015-10-07 3 views
0

Я повторно использовал код, который я нашел здесь, чтобы установить прозрачность значка TK, но он оставляет TK там в вызываемом окне. Я создал второе окно, и я могу редактировать этот заголовок. Но почему я не могу редактировать код, который я нашел из существующего сообщения. Я смотрел повсюду, но в новом окне, которое я сделал, название можно редактировать, почему бы не другое окно с Tk в нем?Удаление TK из заголовка окна Python tkinter

from tkinter import * 
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) 

root = Tk() 

root.title("rename")  

tk = tkinter.Tk() 
tk.iconbitmap(default=ICON_PATH) 
label = tkinter.Label(tk, text="Window with transparent icon.") 
label.pack() 



root.mainloop() 
+0

У вас есть два объекта 'Tk'. Не делай этого. – TigerhawkT3

+0

Я знаю, что у меня есть два импорта tkinter, но я почти готов уничтожить одно окно или скрыть его. И используйте второе окно. – mydiax

+0

У вас есть два 'Tk' _объекта_:' root' и 'tk'. Вы не должны этого делать. – TigerhawkT3

ответ

2

Прежде всего, вы не должны создавать несколько Tk() приложений в одной и той же программе.

Проблема возникает из-за того, что вы создаете новое окно (приложение) с помощью Tk(), но вы переименовываете только заголовок root. Это не переименовывает заголовок приложения tk. Это вы создаете.

Если вы хотите, чтобы название было переименовано в окно с меткой - Окно с прозрачным значком.. Вы должны использовать tk.title() (вместо root.title()). Пример -

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.title("rename") 
tk.iconbitmap(default=ICON_PATH) 
label = tkinter.Label(tk, text="Window with transparent icon.") 
label.pack() 
tk.mainloop() 

И вам не нужно несколько импорта tkinter, он ничего не делает. Импортируя tkinter (или любой модуль), когда он кэширует его в sys.modules, и в любое время, когда вы попытаетесь импортировать его снова, вы получите этот кешированный модуль от sys.modules.


Если вы хотите создать несколько окон в вашем приложении вы должны использовать Toplevel widget для этого. Пример:

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.title("rename") 

tknewwindow = tkinter.Toplevel(tk) 
tknewwindow.title("rename1") 
tknewwindow.iconbitmap(default=ICON_PATH) 

label = tkinter.Label(tknewwindow, text="Window with transparent icon.") 
label.pack() 

tk.mainloop() 
+0

Спасибо, я только начинаю с приложений GUI и Tkinter. Я думаю, что это должно быть снято для людей, которые хотят убрать Tk в своих окнах. – mydiax

+0

Рад, что мне было полезно! :-) Если бы ответ был полезен, я хотел бы попросить вас принять ответ (нажав галочку в левой части ответа), это было бы полезно для сообщества. –

Смежные вопросы