Python:Tkinter iconbitmap赋值仅适用于模块级别

问题描述 投票:0回答:1

我正在使用tkinter.ttk窗口,我正在使用图标来设置窗口的iconbitmap。但是在Windows 10中忽略了root.iconbitmap()。但有一种简单的方法可以避免错误:root.tkinter.call('wm', 'iconphoto', root._w, icon)

所以:

from tkinter import *
from tkinter.ttk import *

root=Tk()
root.call('wm', 'iconphoto', root._w, icon)

作品。但:

def func():
    root=Tk()
    root.call('wm', 'iconphoto', root._w, icon)

不起作用。发生错误。有趣的是,该错误与使用root.iconbitmap()时出现的错误完全相同:

Traceback (most recent call last):
File "E:\test.py", line 95, in <module>
func()
File "E:\test.py", line 36, in func
t.call('wm', 'iconphoto', t._w, icon)
_tkinter.TclError: can't use "pyimagex" as iconphoto: not a photo Image

剩下一个有趣的事实:在另一个文件中我试图将它作为一个函数使用,它起作用了。在新文件(test.py)中它不起作用(它是相同的功能)。有人知道为什么它不起作用,我能做些什么来避免错误?提前致谢...

python tkinter ttk
1个回答
1
投票

如果你已经打开了一个窗口并且想要用它自己的图标打开另一个窗口那么你应该使用Toplevel()而不是Tk()并更改图标使用

W2 = Toplevel()
icon = PhotoImage(file='icon.png')
W2.tk.call('wm', 'iconphoto', root._w, icon)

例:

from tkinter import *
from tkinter.ttk import *

def test():
    root = Toplevel()
    icon = PhotoImage( file='icon.png' )  # path to the icon
    root.tk.call('wm', 'iconphoto', root._w, icon)

r = Tk()

b =  Button(r, text='press', command=test)
b.pack()

mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.