我试图利用我在大学里学到的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()
任何有关我应该做什么的提示和答案都值得赞赏!
答案 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)相反。