我的问题与在PyQt中获取布局的小部件有些相关,但它不是一个重复的问题。我不是在寻找高层次的战略视图来完成它,而是试图理解最惯用和直接的方法。由于PyQt是Qt C++ API的准确绑定,因此它提供了一种类似C语言的方法来访问布局中的小部件。以下是我一直在使用的惯用语:
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程序员,但是这段代码看起来似乎不太符合Pythonic的风格。我的直觉告诉我,在理想情况下,Python代码应该更像这样:
for w in layout.widgets():
doSomething(w)
我错了吗?我有没有错过更好的习语?这是在PyQt中迭代小部件的最佳方式吗?我倾向于用C++思考,因此有时会忽略使事情变得更好的“明显”的Python语言特性。我所做的一部分是递归地进入具有小部件布局的小部件,具有布局的小部件(等等...),以便自动连接在设计时制作的UI的连接。加入QTabWidgets和处理在设计师中设置的动态属性,我的代码基本上可以工作,但感觉非常笨重。