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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

1回答

2000閲覧

turtleのペンの色をtkinterのリストボックスから選択して変更したい

arinomi

総合スコア4

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2020/09/08 09:00

前提・実現したいこと

初心者です。
図形を入力した値に合わせてturtleで書くということをしています。
turtleのペンの色をtkinterのリストボックスから選択して変更しようとしましたが、以下のようなエラーが出てしまいました。
ご教示いただけると幸いです。よろしくお願いします。

発生している問題・エラーメッセージ

tkinter.TclError: invalid command name ".!frame.!listbox"

該当のソースコード

python

1import tkinter as tk 2from turtle import* 3from tkinter import StringVar 4 5root = tk.Tk() 6root.geometry('300x300') 7frame = tk.Frame(root, width=300, height=300, bg="white") 8frame.place(x=100, y=140) 9lblL = tk.Label(text='ペンの色') 10lblL.place(x=25, y=140) 11 12 13var = StringVar(value=['black', 'red', 'blue', 'yellow', 'pink']) 14listbox = tk.Listbox(frame, 15 listvariable=var, 16 height=5) 17listbox.pack() 18 19lbl0 = tk.Label(text='x角形') 20lbl0.place(x=25,y=40) 21txt0 = tk.Entry(width=20) 22txt0.place(x=100, y=40) 23 24lbl3 = tk.Label(text='一辺の長さ') 25lbl3.place(x=25,y=60) 26txt3 = tk.Entry(width=20) 27txt3.place(x=100, y=60) 28 29lbl2 = tk.Label(text='x角形の数') 30lbl2.place(x=25,y=80) 31txt2 = tk.Entry(width=20) 32txt2.place(x=100, y=80) 33 34lbl1 = tk.Label(text='描きたい円の数') 35lbl1.place(x=25,y=100) 36txt1 = tk.Entry(width=20) 37txt1.place(x=100, y=100) 38 39lbl4 = tk.Label(text='半径') 40lbl4.place(x=25,y=120) 41txt4 = tk.Entry(width=20) 42txt4.place(x=100, y=120) 43 44 45def col(): 46 if len(listbox.curselection()) == 0: 47 return 48 index = listbox.curselection()[0] 49 pencolor(listbox.get(index)) 50 51def draw(): 52 get_txt0 = txt0.get() 53 get_txt2 = txt2.get() 54 get_txt3 = txt3.get() 55 for i in range(int(get_txt2)): 56 left(360 / int(get_txt2)) 57 for i in range(int(get_txt0)): 58 forward(int(get_txt3)) 59 left(360 / int(get_txt0)) 60 61 62 63 64 65def do(): 66 get_txt1 = txt1.get() 67 get_txt4 = txt4.get() 68 for i in range(int(get_txt1)): 69 circle(int(get_txt4)) 70 left(360 / int(get_txt1)) 71 72 73 74 done() 75hideturtle() 76btn = tk.Button(text = '実行', command=lambda:[draw(), do(), col()],bg='RoyalBlue2',fg='green2') 77btn.pack(fill = 'x', padx=30) 78 79 80tk.mainloop() 81

試したこと

エラーメッセージを調べたり、代用のコードがないか調べました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数col()で、配色を決定しておりますが
実行は一番最後の実行となってしまっており、図を描画した後に配色が変更されてしまっています。

従って関数の実行の順番を変えてあげる事で色を変更し描画する事が出来る様になりました。

python

1btn = tk.Button(text = '実行', command=lambda:[col(), draw(), do()],bg='RoyalBlue2',fg='green2')

投稿2020/09/08 09:52

nto

総合スコア1438

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

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

arinomi

2020/09/08 10:18

ありがとうございます。実行したい順番に並べることが重要なんですね。うまく実行できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問