我见过设置 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()
and
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
or Canvas
or 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()
* Note:自从最初写这个答案以来,我改变了立场。我现在更喜欢继承Frame
而不是Tk
。无论哪种方式都没有真正的优势,这更多的是一种哲学选择。无论如何,我相信无论你继承的是Frame
or Tk
,我认为任何一个选择都比代码中从无继承的第一个示例更好。
继承的一点点优势Frame
已经结束Tk
是在您希望应用程序支持多个相同窗口的情况下。在这种情况下,继承自Frame
允许您将第一个窗口创建为 root 的子窗口,并将其他窗口创建为 root 实例的子窗口Toplevel
。然而,我见过很少有程序需要这样做。
有关我认为 Tkinter 程序应该如何构建的更多信息,请参阅我的答案 https://stackoverflow.com/a/17470842/7432对这个问题Python Tkinter 程序结构 https://stackoverflow.com/q/17466561/7432.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)