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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:Tkinter iconbitmap赋值仅适用于模块级别相关的知识,希望对你有一定的参考价值。

我正在使用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:	est.py", line 95, in <module>
func()
File "E:	est.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)中它不起作用(它是相同的功能)。有人知道为什么它不起作用,我能做些什么来避免错误?提前致谢...

答案

如果你已经打开了一个窗口并且想要用它自己的图标打开另一个窗口那么你应该使用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()

以上是关于Python:Tkinter iconbitmap赋值仅适用于模块级别的主要内容,如果未能解决你的问题,请参考以下文章

python tkinter 如何修改任务栏的窗口图标?

带有 cx_freeze 的 python 3.2 tkinter 图标

python tkinter 如何将tk界面中标题栏中的tk红色字样去掉,或者换成其他的字

删除 Tkinter 窗口上的 TK 图标

设置窗口图标tkinter macosx

在 Mac OS 上设置 tkinter 图标