python - 使用类来构建由其他对象组成的对象是一种好习惯吗?
问题描述
我正在使用 Python/Tkinter 构建一个应用程序,并遇到了这个“问题”:
让我们使用这段代码:
from tkinter import *
class Foo():
def __init__(self, window):
self.this_frame = Frame(window)
self.generic_txt_label = Label(self.this_frame, text="Value:")
self.generic_txt_label.grid(row=0, column=0, sticky=W)
self.value_label = Label(self.this_frame, text="0.00")
self.value_label.grid(row=0, column=1, sticky=W)
self.this_frame.grid()
root_window = Tk()
bar = Foo(root_window)
root_window.mainloop()
该代码将生成一个内部带有两个标签的框架。在我的应用程序中,我需要 3 个该框架,我认为我可以做到bar_2 = Foo(root_window)
并且bar_3 = Foo(root_window)
.
这是一个好习惯吗?使用一个类来创建和组合多个对象。如果没有,我该怎么做?
解决方案
是的,绝对是,而且很常见。而且您距离另一个非常常见的做法只有一小步,即对现有的 tkinter 小部件进行子类化以制作您自己的自定义小部件。尝试这个:
from tkinter import *
class Foo(Frame):
def __init__(self, master=None, **kwargs):
super().__init__(master, **kwargs)
self.generic_txt_label = Label(self, text="Value:")
self.generic_txt_label.grid(row=0, column=0, sticky=W)
self.value_label = Label(self, text="0.00")
self.value_label.grid(row=0, column=1, sticky=W)
root_window = Tk()
bar = Foo(root_window)
bar.grid()
bar_2 = Foo(root_window)
bar_2.grid()
bar_3 = Foo(root_window)
bar_3.grid()
root_window.mainloop()
现在 Foo 具有 tkinter Frame 的所有属性,如 pack() 和 grid(),并且表现得就像 Frame,因为它实际上是 Frame 的一种。
推荐阅读
- python-3.x - 将模块从子文件夹导入python3x中的不同子文件夹
- javascript - Angular - 在面包屑中使用参数
- r - 使用 R 在 XML 节点中插入序列号
- javascript - 在图中查找死锁
- javascript - pythonic javascript中的嵌套默认字典
- qt - QT Creator release build QResource not found 错误
- selenium - 从 testng.xml 运行测试时出现错误“取决于不存在的组”
- arrays - 我如何使用 sortBy()
- amazon-web-services - S3 向 SQS 发送消息,EC2 脚本检查消息是否存在
- flutter - Flutter,在浏览器中打开 PDF 中的超链接