这是一个 Python 风格的问题——我的 Python 代码有效,我只是在寻找编码约定的建议,使代码更易于阅读/理解/调试。
具体来说,我正在研究一个 Python 类,它允许调用者将小部件添加到自定义 GUI。要设置 GUI,用户将编写一个将小部件(命名或匿名)添加到小部件区域的方法,以便小部件形成一棵树(这在 GUI 中很常见)。
为了允许用户设置小部件树而不必为每个容器小部件命名(然后在每次添加子小部件时显式引用该父小部件),我的 API 支持“父小部件”的概念堆”。声明容器小部件时,用户可以指定将该小部件推送到此堆栈上,然后默认情况下将任何其他小部件(未明确指定父级)添加到堆栈顶部的父级。这是我的意思的一个简单示例:
def SetupGUI(self):
self.AddWidget(name="root", type="container", push=True)
self.AddWidget(type="container", push=True)
for i in range(0,8):
self.AddWidget(name="button%i"%i, type="button")
self.PopParentWidget() # pop the buttons-container off the parents-stack
self.AddWidget(type="container", push=True)
for i in range(0,8):
self.AddWidget(name="slider%i"%i, type="slider")
self.PopParentWidget() # pop the sliders-container off the parents-stack
self.PopParentWidget() # pop the container "root" off the parents-stack
这很方便,但我发现当 GUI 层次结构变得更精细时,开始变得难以分辨对 self.PopParentWidget() 的哪个调用对应于哪个容器小部件。输入太多或太少很容易,最终会在 GUI 中得到非常有趣但意想不到的结果。
所以我的问题是,没有强制 PopParentWidget() 采用明确的小部件名称(我想避免这种情况,因为我不想命名每个容器小部件),我能做些什么来进行推送/代码中的流行配对更明显?
在 C/C++ 中,我会使用缩进,但在 Python 中,我不允许这样做。例如,我希望能够做到这一点:
def SetupGUI(self):
self.AddWidget(name="root", type="container", push=True)
self.AddWidget(type="container", push=True)
for i in range(0,8):
self.AddWidget(name="button%i"%i, type="button")
self.PopParentWidget() # pop the buttons-container off the parents-stack
self.AddWidget(type="container", push=True)
for i in range(0,8):
self.AddWidget(name="slider%i"%i, type="slider")
self.PopParentWidget() # pop the sliders-container off the parents-stack
self.PopParentWidget() # pop the container "root" off the parents-stack
...但是如果我有这样的创意,Python 会抛出一个 IndentationError 。