我正在pycharm中开发一个python程序。在我的代码的这一行:
rut = Tk()
rut.tk.call('wm', 'iconphoto', rut._w, PhotoImage(file=icon_file))
我在'rut._w'上发出警告说:
访问类
的受保护成员_w
当我按ctrl +输入时,它给了我一个选项:
为字段添加属性
当我点击它时,它会将行更改为:
rut.tk.call('wm', 'iconphoto', rut.w, PhotoImage(file=icon_file))
但我知道这不是它的全部,因为如果我手动更改名称,我会得到:
AttributeError:'_ tkinter.tkapp'对象没有属性'w'
那么这里发生了什么? _w是什么意思,什么是.w以及为字段添加属性意味着什么?它实际上是如何完成的?
请注意,Tk是从tkinter包导入的,它不在我的项目文件中,因此我认为pycharm无法编辑它。
答案 0 :(得分:2)
__str__
method defined for Tk returns self._w
即它是私有财产的吸气剂。
您可以使用:
rut.tk.call('wm', 'iconphoto', str(rut), PhotoImage(file=icon_file))
<小时/> Pycharm正在做的是将其添加到
Tkinter
类。这很糟糕,因为您的应用程序可以保证在您的计算机上运行,但不能在Tkinker
类没有修补的其他计算机上运行。 在
Cmd + Click
的{{1}}上 Ctrl + Click
或Tk()
(取决于您的平台)以打开课程定义。你会在最后看到这个。
rut = Tk()