我的問題與Get a layout's widgets in PyQT有些相關,但它不是重複的。我不是在尋找如何做到這一點的高層次戰略觀點,而是試圖理解最簡單,最直接的做法。由於PyQt是Qt C++ API的非常精確的綁定,因此它提供了一種C-ISH方式來獲取佈局中的小部件。這裏是成語的那種我一直使用:在PyQt佈局中循環部件
for i in range(layout.count()):
item = layout.itemAt(i)
if type(item) == QtGui.QLayoutItem:
doSomeStuff(item.layout())
if type(item) == QtGui.QWidgetItem:
doSomething(item.widget())
我不是最有經驗的Python的傢伙,但這似乎有點unpythonic。我的直覺告訴我,在理想的世界中,Python代碼應該看起來更像:
for w in layout.widgets():
doSomething(w)
我錯了嗎?我錯過了一個優越的成語嗎?這是在PyQt中迭代小部件的最佳方式嗎?我傾向於用C++思考,所以我有時會錯過「明顯」的Python語言特性,這些特性使事情變得更好。我正在做的一部分是遞歸地下降到具有佈局的小部件的佈局(等等),以自動連接到運行時在Designer中創建的UI的連接。添加QTabWidgets,並處理在設計器中設置的動態屬性,我的代碼基本上可以工作,但它感覺非常笨拙。
我只是想確定你知道你可以直接從你的UI實例獲得所有的小部件。你可以在你的UI實例上使用dir()來枚舉你的UI中的所有對象(但是這也會讓你像__class__和__eq__一樣被刪除,但這很容易被濾掉)。 – goertzenator 2011-03-04 15:22:03