2017-09-27 75 views
0

我正在開發pycharm中的python程序。在這行我的代碼:Python - 什麼是「添加屬性的領域」呢?

rut = Tk() 
rut.tk.call('wm', 'iconphoto', rut._w, PhotoImage(file=icon_file)) 

而且我得到 'rut._w' 警告說:

access to a protected member _w of a class

當我按Ctrl + Enter它給了我一個選擇:

add property for the field

當我點擊它,它改變了線路:

rut.tk.call('wm', 'iconphoto', rut.w, PhotoImage(file=icon_file)) 

但我知道,是不是所有的它做什麼,因爲如果我手動更改的名字,我會得到:

AttributeError: '_tkinter.tkapp' object has no attribute 'w'

所以這裏發生了什麼? _w是什麼意思,以及.w怎麼樣,這是什麼意思添加屬性爲,它是如何實際完成的?

請注意Tk是從tkinter包中導入的,它不在我的項目文件中,所以我想pycharm不能編輯它。

+0

'rut'是'Tk'的一個實例。 PyCharm似乎正在爲'Tk'類的源頭中的'Tk'實例定義'w'屬性。 –

+0

Tk是從tkinter包中導入的,它不在我的項目文件中,所以我想pycharm不能編輯它(對不起,我應該在問題中澄清這個問題,我現在就來)@OluwafemiSule –

+0

當Pycharm發生變化時,你的應用程序是否成功運行屬性爲'w'? AFAIK,[TK沒有定義'w'屬性](https://github.com/python/cpython/blob/3.6/Lib/tkinter/__init__.py#L1996)如果你的應用程序運行成功,你必須知道Pycharm是猴子修補的。請參閱我的回答,瞭解如何避免使用私有財產 –

回答

2

__str__ method defined for Tk returns self._w它是一個私人財產的吸氣劑。

您可以使用:

rut.tk.call('wm', 'iconphoto', str(rut), PhotoImage(file=icon_file)) 


什麼Pycharm正在做的是加入這 Tkinter類。這很糟糕,因爲您的應用程序可以保證在您的機器上運行,但不會在其他機器上運行,因爲 Tkinker類沒有進行過修補。

Cmd + ClickCtrl + Click(取決於您的平臺)Tk()rut = Tk()打開類定義。最後你會看到添加的內容。

@property 
def w(self): 
    return self._w 
+0

你能不能也向我解釋一下這個領域增加了什麼屬性呢? –

+0

請參閱我的解釋。 –