【问题标题】:Python GUI ConstructorPython GUI 构造函数
【发布时间】:2015-08-13 07:46:26
【问题描述】:

我是 Python 新手,但不是编程新手。在this tutorial 中,作者在他的类中初始化了一个构造函数,如下所示:

class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent) 

我理解,您在 C# 和 Java 中也是如此。但是,在this tutorial,作者为什么不这样做呢?他只初始化应用程序。像这样:

app = Tk()

在什么情况下我会做第二个而不是第一个?您认为哪个更好?

【问题讨论】:

  • 谢谢,但是视频中的那个人从来没有真正完成你在 app = Tk() 之前提供的链接中的所有代码,为什么?
  • 我没有看过视频,但大概他们不需要/想要提供的控制级别。子类化 Tkinter 组件为您提供了许多额外的选项,但如果您实际上并不需要这些选项(例如,您只是创建一个简单的 UI),那么可能不值得付出努力。或者,由于它是一个教程,他们可能会选择专注于 Tkinter 开发的其他方面,而不涉及 OOP 方面。不过,只有他们可以肯定地回答!
  • 谢谢,我现在明白了。

标签: python


【解决方案1】:

就我个人而言,我总是做第二个,因为当您制作更长的应用程序时,它会容易得多。这是使用第二个的示例:

from Tkinter import *

app = Tk()    #app is a variable, so in the future, you can define Tk() as anything you want. Most people call it root
frame = Frame(app)
frame.pack()

bottomframe = Frame(app)
bottomframe.pack( side = BOTTOM )

redbutton = Button(frame, text="Red", fg="red")
redbutton.pack( side = LEFT)

greenbutton = Button(frame, text="Brown", fg="brown")
greenbutton.pack( side = LEFT )

bluebutton = Button(frame, text="Blue", fg="blue")
bluebutton.pack( side = LEFT )

blackbutton = Button(bottomframe, text="Black", fg="black")
blackbutton.pack( side = BOTTOM)

app.mainloop()

祝你好运。抱歉,我无法准确回答您的问题

【讨论】:

  • 谢谢!非常感谢
【解决方案2】:

重要的是要强调它与 Java 不同。 在 Java 中,如果子类承包商没有指定调用超类的特定承包商,编译器将自动调用超类中可访问的无参数构造函数。

在 Python 中这不会发生。如果您不指定超级承包商的电话,则不会有任何电话。因此,在您的代码中,子类承包商的第一行是对超类承包商的调用:

Tkinter.Tk.__init__(self,parent) 

在学习新语言时检查和理解这个问题很重要。

【讨论】:

  • 我理解它与 Java 不同,但我的意思是,Java 和 C# 在 GUI 应用程序中都有构造函数,但是,正如您所指出的,在某些条件下,它们的执行方式不同。
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 2020-09-21
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多