我希望有人能向我解釋爲什麼我不斷遇到兩種不同的方法,讓人們將按鈕放到窗口小部件中的差異和原因?我有時會看到使用自己的按鈕創建python窗口小部件
button = Button('Button', self)
或
self.spinner = QtGui.QSpinBox()
我只是想知道什麼區別,是一個比其他有益?何時使用哪些場景以及爲什麼? 「自我」的位置是否會影響小部件的某些方面?
我希望有人能向我解釋爲什麼我不斷遇到兩種不同的方法,讓人們將按鈕放到窗口小部件中的差異和原因?我有時會看到使用自己的按鈕創建python窗口小部件
button = Button('Button', self)
或
self.spinner = QtGui.QSpinBox()
我只是想知道什麼區別,是一個比其他有益?何時使用哪些場景以及爲什麼? 「自我」的位置是否會影響小部件的某些方面?
假設你只關心的PyQt和PySide ...
有跡象表明,self
出現在你的例子,這意味着非常不同的事物的兩個不同的地方。
首先,作爲參數的構造器:
每個小部件的構造有parent
參數,用None
默認值。
有三個原因離開了父母:
QDesktopWidget
。如果這些都不是真的,則需要傳遞父級。如果self
是一個小部件,並且您創建的是該小部件的子項,那麼您將通過self
作爲父項。
這裏的第一個替代的例子:
self.spinner = QtGui.QSpinBox()
hbox = Qt.QHBoxLayout()
hbox.addWidget(self.spinner)
self.addLayout(hbox)
我們不能在構造時父母傳遞給QSpinBox
,因爲它的父尚不存在。所以,我們把它關掉,然後addWidget
它到一個佈局對象。
這在PySide或PyQt的大多數教程中都有解釋,例如First programs in PySide和Layout management in PySide。
同時,你的一個例子存儲在self.spinner
小部件,使其在self
實例屬性,這意味着我們可以參考它以後。例如,如果其他方法(如按鈕的信號處理程序)想要調整微調器的值,則可以將其作爲self.spinner
進行訪問。
如果您不需要在當前函數之後引用代碼中的子部件,則不需要存儲它。
該部分在Python教程的Classes一章中進行了說明。
我很欣賞這個偉大的答案。我目前正在從另一種語言進入python,我不清楚這是什麼意思。非常感謝你,我會研究你發送的鏈接以獲取更多信息。 – JokerMartini
這看起來像來自兩個完全不同的小部件框架。(第二個顯然是Qt,第一個可能不是。)不同的框架工作方式不同。 – abarnert