在没有 .append 的情况下将 Tkinter 按钮添加到列表

Adding Tkinter Buttons to a list without .append

我目前正在尝试使用 tkinter 来提高我的代码效率。我希望能够在以后为我的按钮编制索引,所以我试图将它们放入列表中,而不是首先创建一个空白列表并在我循环时将它们附加到它(我目前知道该怎么做的唯一方法) .我目前正在进行以下操作,但目前每次循环运行时它都会覆盖索引 0 处的按钮而不是附加到列表中,我将如何使用类似的东西或使用列表理解来创建我的按钮?

for btn in range (6):
            self.Preset_Lbl = [tk.Button(self.window, width = 5, height = 1, text = mylist[0] 
            [btn], relief = "groove")]
            self.Preset_Lbl[btn].grid(row = btn, column = 1)

提前致谢

trying to make my code efficient

一般来说,只有在证明(通过测量,即通过分析)它是一个主要瓶颈后,您才应该费心去优化代码。一般来说,对于 GUI,创建 window 并用小部件填充它是一个 one-time 事件。所以它不太可能是程序中效率最低的代码。

首先,优化通常会使代码更加复杂,难以阅读和理解。例如,对于程序员来说 stopbutton 几乎是不言自明的。如果您引用与 buttons[0] 相同的对象,则不清楚该按钮应该做什么。

其次,您在衡量代码之前并不知道代码中的瓶颈是什么。 例如,在我的stl2pov程序中,结果是string formatting was actually consuming most of the time。并将适当的类型说明符用于格式字符串 减半 必要的时间。 Another examplestatistics.mean 替换为 statistics.fmean 将运行时间减少了大约三分之一。

与评论相反,您确实可以创建一个列表变量并在同一行中初始化它的所有值,而无需循环遍历它(它确实在实现中使用了 for 循环,但它被简化为一行且不直接使用函数 append()):

self.Preset_lbl = [tk.Button(self.window, width=5, height=1, text=mylist[0][btn], relief="groove") for btn in range(6)]

你需要自己决定,如果你关心这种方法的可读性,或者你也可以检查它是否会以任何方式影响性能 profiling/benchmarking 正如 Roland Smith 所说。