当前位置: 首页 > 面试题库 >

在Tkinter应用程序中是否继承自Frame

夏兴生
2023-03-14
问题内容

我已经看到了设置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没有任何我更有意义,然后继承ButtonCanvasLabel。由于您只能有一个根,因此这就是您继承的根。

我还认为,如果您执行导入操作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