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

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

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

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

Python

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

Q&A

解決済

1回答

3551閲覧

【tkinter】tk.Checkbuttonクリック時の背景色を変えないには【Python】

netz-eng

総合スコア105

Tkinter

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

Python

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

1グッド

0クリップ

投稿2021/07/25 14:59

編集2021/08/08 11:10

前提・実現したいこと

独学でGUIを勉強しています。

現在、背景色のついたFrame上に、同じ背景色をつけたtk.Checkbuttonを配置しています。(下図)
Checkbutton実装画面

ここまでは自分の思い通りなのですが、このあとCheckbuttonウィジェットをクリックする瞬間、一瞬背景が標準色になってしまいます。(下図)
クリックした瞬間

該当のソースコード

python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4win=tk.Tk() 5win.title("Check_Background") 6 7win.resizable(0,0) 8win.geometry("500x400") 9 10fra=tk.Frame(win, bg="turquoise") 11fra.grid(row=0, column=0, sticky="nswe") 12 13cb=tk.Checkbutton(fra, text="CB", bg="turquoise") 14cb.grid(row=0, column=0, sticky="nswe") 15 16win.mainloop()

試したこと

ttk.Checkbuttonに乗り換えてスタイルを定義すると背景はうまくいくのですが、
今度はチェックボックス部分の外観がチェック☑マークから単色■に変わってしまうため、できればtk.Checkbuttonでうまくいけば……と思っています。

補足情報(FW/ツールのバージョンなど)

Windows10
Python 3.8.3
tkinter 8.6.9

TH_👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

スタイル周りの詳細な挙動は、プラットフォーム毎に異なる可能性がありますが、

ttk.Checkbutton を使うとクリック時の色変更を抑制できます。

ttk のウィジェットでは bg= オプションはサポートされてないので、
ttk.Style を使いスタイル指定します。

python

1style = ttk.Style() 2style.configure( 3 "My.TCheckbutton", background="turquoise", 4) 5 6v = tk.BooleanVar() 7cb=ttk.Checkbutton(fra, text="CB", 8 9 # ttk では bg オプションはなくなります。 10 11 # デフォルトだと3値のチェックボタンになるので、2値のチェックボタンにする設定。 12 variable=v, 13 14 # スタイル指定。スタイルの内容は別の場所で定義 15 style="My.TCheckbutton" 16 )

ttk のテーマによっても挙動が違う事があるので、その場合は、
複数のテーマを試してみてください。例: style.theme_set("default")

投稿2021/07/29 04:52

teamikl

総合スコア8760

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

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

netz-eng

2021/08/08 11:13

ご回答ありがとうございます。 質問文が途中で途切れてしまっていたため、追記編集いたしました。 おっしゃるとおり、ttkにすると背景色はうまく扱えるのですが、今度はチェックボックスの外観が☑マークから単色■になってしまい、しっくり来ません。 そのため、 ①tk.Checkbuttonのままで背景色を変えない方法、もしくは、 ②ttk.Checkbuttonでチェックボックスの外観を☑マーク表示する方法 があれば、是非教えていただきたいです。
teamikl

2021/08/09 06:21

(1) は、恐らくFrameの背景色はチェックボタンに覆われてて、 見えない状態なので、チェックボタンのactivebackground の指定 cb=tk.Checkbutton(fra, text="CB", bg="turquoise", activebackground="turquoise") (2) は、テーマの変更でチェックボックスの外観は一応変更可能です。 但し、好みの外観を作りたいといった場合は、かなり複雑になってきます。 (カスタマイズの枠組みとしては提供されてるが、公開されてる情報が少ない)
netz-eng

2021/08/12 18:15

ご提案いただいた(1)の方法で、無事想定した動作を実現することができました! いつもありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問