在没有 .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 example 将 statistics.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 所说。
我目前正在尝试使用 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 example 将 statistics.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 所说。