2017-07-07 23 views
0

我有一个现成的Python 3程序,我没有使用任何面向对象的技术(这是我的第一个Python程序)快速而又脏地编写的。现在是时候清理它了,我在课堂上让tkinter工作时遇到了问题。为什么我不能使用tkinter网格方法放置这个类?

这里是一个简化的例子。它只是试图将ttk.Entry小部件放入类,这是从ttk.Frame继承:

import tkinter as tk 
from tkinter import ttk 

class MyClass(ttk.Frame): 
    def __init__(self, parent): 
     self.frame = ttk.Frame(parent) 

     # Entry widget 
     self.entValue = ttk.Entry(self.frame) 
     self.entValue.grid(column=0, row=0) 

# tkinter init 
root = tk.Tk() 

# Make the class instance and place it 
test = MyClass(root) 
test.grid(column=0, row=0) 

它给了我下面的错误:

Traceback (most recent call last): 
    File "{path_to_code}/so.py", line 17, in <module> 
    test.grid(column=0, row=0) 
    File "{path_to_python}\Python35-32\lib\tkinter\__init__.py", line 2072, in grid_configure 
    self.tk.call(
AttributeError: 'MyClass' object has no attribute 'tk' 

我缺少什么?

回答

2

您的相框尚未初始化。将super().__init__(parent)添加到MyClass.__init__方法的顶部,以允许ttk初始化帧。我想你可以摆脱self.frame。将设置为MyClass中的小部件的父项,而不是self.frame

+0

是的,你说得对。对不起这个错误。 – FamousJameous

+0

正是我所需要的;谢谢:) – bitsmack

-1

请不要在Tkinter中使用GRID方法。这是Tkinter中最糟糕的方法。 请使用Place()方法来设计您的GUI。这很容易实现。

详细检查的内容在广场()是指这个帖子how to i position buttons in tkinter?

这个地方的方法并不复杂像格()。检查这篇文章,让你的GUI在Python中更好。

+0

谢谢!但是我的GUI已经使用grid()构建。在了解了复杂性之后,我发现Grid非常强大并且非常有用。我可以改变我的个人几何形状,而且GUI可以像魔术般调整自己! – bitsmack

+0

每个人都有他们的优先事项:-) @bitsmack – babygame0ver

相关问题