2017-07-07 11 views
0

私は、オブジェクト指向の技術(これは私の最初のPythonプログラムでした)なしで素早く書いた既存のPython 3プログラムを持っています。それは私がそれをきれいにする時です、そして、私はクラスで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を設定します。

+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

関連する問題