我已经看到了设置tkinter程序的两种基本方法。有什么理由更喜欢另一种吗?
from Tkinter import *
class Application():
def __init__(self, root, title):
self.root = root
self.root.title(title)
self.label = Label(self.root, text='Hello')
self.label.grid(row=0, column=0)
root = Tk()
app = Application(root, 'Sample App')
root.mainloop()
和
from Tkinter import *
class Application(Frame):
def __init__(self, title, master=None):
Frame.__init__(self, master)
self.grid()
self.master.title(title)
self.label = Label(self, text='Hello')
self.label.grid(row=0, column=0)
app = Application('Sample App')
app.mainloop()
我更喜欢*的选项是从Tk类继承。我认为这是更合理的选择,因为窗口实际上是您的应用程序。来自继承,Frame
没有任何我更有意义,然后继承Button
或Canvas
或Label
。由于您只能有一个根,因此这就是您继承的根。
我还认为,如果您执行导入操作import Tkinter as tk
而不是,它会使代码更具可读性from Tkinter import *
。然后,您所有的呼叫都明确提及该tk
模块。我不建议所有模块都使用此功能,但对我来说,使用Tkinter有意义。
例如:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.label = tk.Label(text="Hello, world")
self.label.pack(padx=10, pady=10)
app = SampleApp()
app.mainloop()
*注意:
自从最初编写此答案以来,我已经改变了立场。我现在宁愿继承Frame
而不是继承Tk
。一种或另一种方式没有真正的优势,它比其他任何东西更多地是一种哲学选择。无论如何,我相信无论您是继承自Frame
还是Tk
,我都认为选择要比代码中第一个不继承任何内容的示例更好。
从头继承Frame
过来的一个小优点Tk
是,您希望您的应用程序支持多个相同的窗口。在这种情况下,从继承Frame
可让您将第一个窗口创建为root的子代,并将其他窗口创建为实例的子代Toplevel
。但是,我看到很少有程序需要这样做。
有关我认为应该如何构造Tkinter程序的更多信息,请参阅我对[PythonTkinter程序结构问题的回答。
问题内容: 伙计们,我们是像其他任何类一样从Object继承的(当然,我们不必明确声明除外)还是对Object类有一些特殊的特权,并且它不像其他类那样继承? 问题答案: 不,是一样的。这是JLS 8.1.3 的摘录: 如果任何其他类的类声明都没有extends子句,则该类会将其作为其隐式直接超类。 当然,它本身有点特殊(JLS): 每个类都只是单个现有类(第8.1.3节)的扩展(即其子类),并且可
问题内容: 今天,我在采访中面临一个问题。是否可以在Singleton类上应用继承概念?我说过,由于构造函数是私有的,因此我们无法扩展该Singleton类。 他问我的下一件事是将继承应用于该Singleton类。因此,我将Singleton的构造函数作为受保护对象,认为孩子的构造函数也已受到保护。但是我错了,孩子可以有一个等于或大于该值的修饰符。 因此,我请他在这种情况下举一个真实的例子。他没能
本文向大家介绍List,Set, Map是否继承自Collection接口?相关面试题,主要包含被问及List,Set, Map是否继承自Collection接口?时的应答技巧和注意事项,需要的朋友参考一下 答:List,Set是Map不是
问题内容: 我已经读过类似这样的文章,其中介绍了在Swift中进行子类化或仅具有其本机基础而不进行子类化的区别。但是它们都有些过时,我对此主题尚不清楚。 什么时候应该继承?子类化与不子类化之间的实际区别是什么?Swift中的建议是什么? 问题答案: 苹果公司有关NSObject的文档介绍如下: NSObject是大多数Objective-C类层次结构的根类。通过NSObject,对象继承了运行时系
快速提问,我正在学习接口和继承。 这不是实际的代码,只是一个例子。假设我有抽象类“动物”。对马和犬类等组有一些继承。还有一个接口“宠物”。它将用于动物的不同子类。犬类“狗”的子类实现了接口“宠物”。因此“狗”的所有子类也实现了接口“宠物”,而不必在“狗”的每个子类上单独实现“宠物”,对吗?
假设我有5个Spring Boot项目。他们都对Spring Boot项目6有Maven依赖,该项目有一些共享/公共类。5个独立项目在每个应用程序中都分配了许多公共属性。属性,我想对其进行抽象并将其移动到公共项目。总的来说是这样的: 目前的问题是app-common.properties在project1.jar/lib/common-project.jarapp-common.propertie