【问题标题】:How do I create a Tkinter canvas from an object creation?如何从对象创建中创建 Tkinter 画布?
【发布时间】:2018-12-18 04:20:39
【问题描述】:

我正试图弄清楚如何利用我在大学中学到的 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()

感谢任何关于我应该做什么的提示和答案!

【问题讨论】:

  • 你可能需要canvas.canvas(),因为canvas既是模块的名称,也是模块内部类的名称。
  • tk.Tk 移动到class canvas(tk.Tk):。将root =tk.Tk() 更改为super().__init__() 并将root.geometry(... 更改为self.geometry(

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


【解决方案1】:

为了创建类画布的新实例,您需要使用语法 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)相反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 2013-11-05
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2019-12-06
    相关资源
    最近更新 更多