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

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

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

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

Tkinter

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

Q&A

解決済

1回答

1148閲覧

追加したtext boxのcolorを変化させたい

trafalbad

総合スコア303

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2021/09/12 14:37

以下のコードはTEXT boxをGUI上で任意の数だけボタンで追加できます。

それで以下のことをしたいです

1 ボタンでboxを3つ追加する
2 ['red', 'green', 'red']の順で追加したboxのbackgraoundのcolorを変化させたい

追加したboxは変数で区別されてないため変数名が同一なので

root.configure(background='black')

などの方法でbgのcolorを変更できません。

追加したボックスのbgのcolorを['red', 'green', 'red']のように変える方法があったら教えてください

python

1import tkinter as tk 2from tkinter import messagebox 3 4bcnt=1 5class Application(tk.Frame): 6 def __init__(self, master = None): 7 super().__init__(master) 8 self.master = master 9 self.master.title("add button") 10 self.master.geometry('500x500') 11 self.all_entries = [] 12 13 self.addboxButton = tk.Button(self.master, text='<Add raw>', fg="Red", command=self.addBox) 14 self.addboxButton.pack() 15 16 def addBox(self): 17 global bcnt 18 if bcnt>7: 19 messagebox.showinfo(title='over space', message='you can not add row anymore') 20 self.ent = tk.Entry(self.master, width=5) 21 self.ent.place(x=30+(bcnt*50), y=30) 22 self.all_entries.append(self.ent) 23 bcnt += 1 24 25if __name__ == "__main__": 26 root = tk.Tk() 27 app = Application(master = root) 28 app.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのタイミングでボタンの背景色を変えたいのかが分かりませんが、

ボタンを追加済みで、あとからまとめて変えたい場合

self.all_entries に全てのボタンが格納されているのですから、その要素に対し順に ...["bg"] = "..." とすれば任意の背景色にできます。

例えば、次のようなコマンドを任意のタイミングで実行すればよいです。

py

1def setBg(self): 2 for i in range(0, len(self.all_entries)): 3 entry = self.all_entries[i] 4 if i == 0 or i == 2: 5 entry["bg"] = "red" 6 elif i == 1: 7 entry["bg"] = "green" 8 else: 9 pass

追加時にその都度背景色を指定する場合

addBox 関数内では現在追加したボタンが何個目なのかを self.all_entries.index(self.ent) で取得できるので、色名を入れた配列とインデックスを対応させて背景色をセットすればよいです。

py

1colors = ["red", "green", "red"] 2bcnt=1

py

1def addBox(self): 2 ... 3 bcnt += 1 4 5 index_of_entry = self.all_entries.index(self.ent) 6 global colors 7 if index_of_entry < len(colors): 8 self.ent["bg"] = colors[index_of_entry]

備考

追加のコードは、あくまでも既存のコードに合わせてます。

一時変数の役割しかしていない self.ent や、self.all_entries にボタンが格納されていて個数が取れるのに bcnt というカウンタを用意していたり、きちんと整理したほうがよい箇所があります。

投稿2021/09/12 15:41

編集2021/09/12 15:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問