从我的代码中可以看出,我正在为tk.Frame创建子类,为tkinter gui创建一个自定义小部件。我将在主gui中实例化这个类,并且需要定期更改其中的标签值。如果我使用tkinter变量类StringVar(),我将需要使用它的.set()方法来更改引用它们的标签的值。
这是不好的做法吗?我的意思是如果除了我自己以外的人使用这个自定义小部件,他们必须知道使用.set()方法传递一个新值。关于这一点对我来说感觉不对......也许我正在思考它。感谢。
import tkinter as tk
class CurrentTempFrame(tk.Frame):
def __init__(self, parent, width=200, height=120,
background_color='black',
font_color='white',
font = 'Roboto'):
# Call the constructor from the inherited class
tk.Frame.__init__(self, parent, width=width, height=height,
bg=background_color)
# Class variables - content
self.temperature_type = tk.StringVar()
self.temperature_type.set('Temperature')
self.temperature_value = tk.StringVar()
self.temperature_value.set('-15')
self.temperature_units = tk.StringVar()
self.temperature_units.set('°F')
self.grid_propagate(False) # disables resizing of frame
#self.columnconfigure(0, weight=1)
#self.rowconfigure(0, weight=1)
title_label = tk.Label(self,
textvariable=self.temperature_type,
font=(font, -20),
bg=background_color,
fg=font_color)
value_label = tk.Label(self,
textvariable=self.temperature_value,
font=(font, -80),
bg=background_color,
fg=font_color)
units_label = tk.Label(self,
textvariable=self.temperature_units,
font=(font, -50),
bg=background_color,
fg=font_color)
title_label.grid(row=0, column=0)
value_label.grid(row=1, column=0)
units_label.grid(row=1, column=1, sticky='N')
if __name__ == "__main__":
root = tk.Tk()
current_temp = CurrentTempFrame(root, font_color='blue')
current_temp.temperature_value.set('100')
current_temp.grid(column=0, row=0, sticky='NW')
root.mainloop()
答案 0 :(得分:2)
这是不好的做法吗?我的意思是如果除了我自己以外的人使用这个自定义小部件,他们必须知道使用.set()方法传递一个新值。 [...]。
你做的不是坏事。创建类的实例变量,是另一个类的实例是完全可以接受的。类实例来自tkinter
。
然而,如果其他人将使用您的课程,您应该记录它。为类及其所有公共方法提供doc-strings。在类中,清楚地记录每个实例变量的类型,以及它们的用途。为方法做同样的事情。记录方法的用途和正确用法。
换句话说,记录您的类API。确保它清晰简洁,并且可以被其他人理解。这就是为什么你可以确定你班级的未来用户 - 包括你自己 - 能够理解你的班级是什么,以及如何使用它。