質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

5759閲覧

AttributeError: '_tkinter.tkapp' object has no attribute 'Entry'が出る

skysoul

総合スコア111

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2020/05/31 10:08

編集2020/06/01 10:40

Pythonでこのようなエラーが出ます。

python

1AttributeError: '_tkinter.tkapp' object has no attribute 'Entry'

問題のコード。別の質問でいただいたコードです。(代表例。例のコードでなくてもたまに出ます)

python

1import tkinter 2 3root=1 4 5# Tkクラス生成 6ttk = tkinter.Tk() 7# 画面サイズ 8ttk.geometry('300x200') 9# 画面タイトル 10ttk.title('') 11 12def create_cb(): 13 i = int(create_num.get()) 14 15 reset() 16 #booleanvarをiの分だけ用意 17 var_lst = [BooleanVar() for var in range(i)] 18 #用意したbooleanvarに、デフォルト=Falseをセットしてあげる 19 [var.set(False) for var in var_lst] 20 #用意しておいたbooleanvarを設定してチェックボックスを生成し、リストに格納 21 cb_lst = [ttk.Checkbutton(frame, variable=var_lst[cb], text='チェックボタン') for cb in range(i)] 22 #生成したチェックボックスをframeに設置していく 23 [wset.grid(row=enum) for enum, wset in enumerate(cb_lst)] 24 25#初期化 26def reset(): 27 for w in cb_lst: 28 w.grid_forget() 29 del var_lst 30 31var_lst = [] 32cb_lst = [] 33 34#チェックボックスを作りたい個数を入力 35create_num = ttk.Entry(root) 36create_num.grid() 37 38#チェックボックスを当てはめる枠組み 39frame = ttk.Frame(root) 40frame.grid() 41 42

環境

My browser / operating system: Windows NT 10.0, Chrome 83.0.4103.61, No Flash version detected
python 3.8.3rc1
pip なし
imprt tkinter

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの原因

python

1import tkinter 2 3ttk = Tk() 4 5# 省略 6 7#チェックボックスを作りたい個数を入力 8create_num = ttk.Entry(root)

双方は個別に見た場合はエラー無く実行可能出来るコードですが、
問題点はここで ttk という変数名を使った点。

tkinter のコードでは、
通常 "ttk" は from tkinter import ttk として
"tkinter.ttk" モジュールを指します。

Tk() のインスタンスに Entry は有りません。
変数名を変えてみると、おかしなところが解ると思います。

python

1import tkinter 2 3root = tkinter.Tk() 4 5# XXX: このコードで同じエラーを再現できます。 6create_num = root.Entry(root)

修正方法、Tk()のインスタンスと、ttkモジュールを区別します。

root が未定義なので、
元の参考にしたコードで root 変数がどのように作られてるのか確認しましょう。
Tk のインスタンスと、ttkモジュールを混同してしまってます。

実際の修正箇所は以下の通りです

python

1import tkinter 2from tkinter import ttk 3 4# XXX: root = 1 は削除 5 6# Tkクラス生成 7root = tkinter.Tk() 8# 画面サイズ 9root.geometry('300x200') 10# 画面タイトル 11root.title('') 12

クラスの部分 ttk.Entry(root) については、ttk/root を区別するように修正すれば変更不要です。
from tkinter import ttk で事前にモジュールのみ読み込んでおきます。

今回の質問のエラーは、本来モジュールのクラスを参照する部分を
別の同名変数を作ってしまったことによるものです。

投稿2020/06/01 10:57

編集2020/06/01 12:22
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2020/06/01 11:32 編集

>Tk のインスタンスと、ttkモジュールを混同してしまってます。 root インスタンスのものか、ttk モジュールのものかを調べて見て下さい geometry は Tk() のメソッドです。titleも同様。
teamikl

2020/06/01 11:34

# Tkクラス生成 ttk.Entry(root) を見るに、なんか伝わってない気がします。 回答を修正しますね
skysoul

2020/06/01 11:39

ttk.geometry('300x200') のところにAttributeError: module 'tkinter.ttk' has no attribute 'geometry' のエラーが出ているみたいです
teamikl

2020/06/01 11:45 編集

出来れば、コード変更するだけでなくて、 エラー原因の把握をしましょう。 コード全部は確認出来てませんが、 root = Tk() と変更したので、ウィンドウのメソッド等は root.geomery、root.title です。 ウィジェット等のクラスは ttk. でアクセスします。
teamikl

2020/06/01 12:23

回答内に修正箇所を追記しました
teamikl

2020/06/01 13:07 編集

ちなみに、動作確認で実行してみたところエラーは解消できましたが、 そこから先は作成中なのでしょうか? - create_cb関数が何処からも使われてません - reset()関数内の var_lst でエラーが出ます - BooleanVar() -> tkinter.BooleanVar()
skysoul

2020/06/03 10:35

あっ。できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問