如何通过对象创建来创建Tkinter画布?

时间:2018-12-17 19:02:27

标签: python python-3.x user-interface tkinter

我试图利用我在大学里学到的Java知识,来弄清楚如何在python中制作可管理的面向对象的应用程序。

我的程序目录中有2个python文件,其中app.py作为驱动程序,而canvas.py为该程序创建Tkinter GUI。这是一个非常简单的GUI,只有2个按钮,我希望一个按钮关闭程序,一个按钮使用app.py中的getCommand()方法。问题是当我在app.py中创建画布对象时,出现错误方法:

TypeError: 'module' object is not callable

这是canvas.py中的代码:     将tkinter导入为tk

class canvas:

def __init__():
    root =tk.Tk()
    root.geometry("400x400")
    frame = tk.Frame(self)
    tk.Button(frame, text="Speak", command=getCommand).pack(side=tk.LEFT)
    tk.Button(frame, text="Quit", command=quit).pack(side=tk.LEFT)
    frame.pack()

在app.py中,我用

创建对象
root = canvas()
root.mainloop()

任何有关我应该做什么的提示和答案都值得赞赏!

1 个答案:

答案 0 :(得分:2)

要创建画布类的新实例,您需要使用语法canvas.canvas(),因为canvas既是类的名称,也是构造方法的名称(如上所述)。

但是请注意,到目前为止,您将变量root设置为canvas类的实例,因此root.mainloop()不会按预期运行,因为canvas不是Tkinter根。 我建议以下内容:

在您的画布课程中:

class canvas:

def __init__(self, root):
    self.root = root
    self.root.geometry("400x400")
    self.frame = tk.Frame(self)
    self.tk.Button(frame, text="Speak", command=getCommand).pack(side=tk.LEFT)
    self.tk.Button(frame, text="Quit", command=quit).pack(side=tk.LEFT)
    self.frame.pack()

然后进入app.py:

root = tk.Tk()
canvas = canvas.canvas(root) # note proper const. of canvas instance
root.mainloop()

另一点说明:如果您打算长期使用Python,建议您遵循Python代码样式约定(例如PEP-8)。在这种情况下,类名应以大写字母开头,方法/函数名应全部为小写,并在必要时使用下划线(_)。这与Java中常见的驼峰式(例如someFunction)相反。