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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

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

Q&A

解決済

1回答

3735閲覧

【Python/ttk】ボタンの背景色の不具合

netz-eng

総合スコア105

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

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

1グッド

0クリップ

投稿2020/07/31 16:13

編集2020/08/02 04:42

tkinterで作成したボタンの背景色を設定したい

tkinterを用いてGUIを作成しています。
下記コードを実行したところ、画像のようなボタンができてしまいました。
イメージ説明

実現したいことは、2点です。
①ボタンの背景(画像の灰色部分)を、任意の色に設定したい
(なぜか背景色として設定したはずの色が、ボタンの枠線に現れている)
②ボタンの高さを任意に設定したい

尚これらは、tk.Buttonではなく、下記コードのようにttk.Buttonを用いて実現したいと思っています。
お詳しい方、ご回答よろしくお願いします。

該当のソースコード

python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4win = tk.Tk() 5win.resizable(False, False) 6pad = {"padx": 5, "pady": 5} 7cen = tk.CENTER 8 9#win.geometry("500x275") 10win.title("tkinter") 11 12 13 14 15#ボタンの作成 16fra = tk.Frame(win, cnf=pad) 17fra.pack(expand=True, fill="x", padx=10) 18fra.columnconfigure([1, 3, 5], weight=1) 19fra.rowconfigure([0, 1, 2], weight=1) 20 21style = ttk.Style() 22style.configure("Bold.TButton", font=("", "12", "bold"), background="#4682B4", foreground="#FFFFFF") 23 24btn = ttk.Button(fra, text="ボタン", width=10, style="Bold.TButton", command=btn_click) 25btn.pack(anchor=cen) 26 27#ボタンの関数については省略 28 29 30win.mainloop()

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

Python 3.8.3
Windows10

ご回答いただいた内容の試行

teamiklさんに教えていただいた解決方法を試してみました。
以下の3行を追加してみたところ、下左図のようなボタンができました。

python

1fra.pack(expand=True, fill="both", padx=10) 2 3style.theme_use("default") 4 5btn.pack()

イメージ説明   イメージ説明
ボタンの設置はうまくいきました! ありがとうございます。
しかし、カーソルをボタン上に移動させると、右図のように背景色が灰色になってしまいました。これを回避する方法はありますでしょうか?
(加えて、もし可能であれば押印時にボタンの外周に表示される枠線を消す方法もあれば、ご教授いただきたいです)

teamikl👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

簡単な回避方法です。

ボタンの背景

style = ttk.Style() style.theme_use("default")

windows では競合する設定があるようです。
何でもいいので他のテーマに変えてみてください。"calm", "alt" 等。


ボタンの縦幅について、

ttk.Button に height 引数は有りませんが、縦方向に伸びない原因は、
親ウィジェットである fra の pack に fill="x" が指定されているためです。
ここを "both" に変更すると、子要素も縦方向に伸縮可能になります。

ですが、今回の質問のケースではリサイズなしなので、
簡単な解決策は、ipady で調整する方法です。

button.pack(fill=tk.BOTH, expand=True, ipady=20)

尚、row/columnconfigure は grid() でのレイアウト用なので、
pack() には影響ありません。

投稿2020/07/31 18:14

teamikl

総合スコア8760

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

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

netz-eng

2020/08/02 04:48

ご回答ありがとうございます! ボタンのサイズや背景色の設定、うまくいきました。 もしお時間があれば、ご回答いただいた内容を踏まえて質問文を追加編集しましたので、合わせてお教えいただければ嬉しいです。よろしくお願いします。
teamikl

2020/08/02 05:30

背景色について ボタンを押した時、非有効時、 マウスが載った時、などの設定が可能です。 style.map("Bold.TButton", foreground=[('pressed', 'red'), ('active', 'blue')], background=[('pressed', '!disabled', 'black'), ('active', '#ffaaff')] ) マウスが載ったときは 'active' の色 枠線は再現できなかったので試してませんが、 "relief" で同様に設定できます。
teamikl

2020/08/02 05:35

> 押印時にボタンの外周に表示される枠線を消す方法 もしフォーカス時の破線であれば、 style.layout("Bold.TButton",   [('TButton.border', {'sticky': 'nswe', 'border': '1', 'children': [     #('Button.focus', {'sticky': 'nswe', 'children': [       ('Button.padding', {'sticky': 'nswe', 'children': [         ('Button.label', {'sticky': 'nswe'})]})       ]})     #]})   ]) ---- 探し方 from pprint import pprint pprint(style.layout("Bold.TButton")) でレイアウトが出力されます。 .focus という要素があるので、その先頭と終端をコメントアウト。 style.map, style.configure についても同様の方法で 適応中の設定を探します。
netz-eng

2020/08/02 10:59

ご返信ありがとうございます! ①背景色の件、試してみたところ成功しました。 ②フォーカス時の破線ですが、ご指摘いただいたコードをインデントを調製して打ち込んでみたところ、 style.layout("Bold.TButton", [('TButton.border', {'sticky': 'nswe', 'border': '1', 'children': [ #('Button.focus', {'sticky': 'nswe', 'children': [ ('Button.padding', {'sticky': 'nswe', 'children': [ ('Button.label', {'sticky': 'nswe'})]}) ]}) #]}) ]) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: I/O operation on closed file. >>> can't invoke "event" command: application has been destroyed while executing "event generate $w <<ThemeChanged>>" (procedure "ttk::ThemeChanged" line 6) invoked from within "ttk::ThemeChanged" このようなエラー? が出てしまいました。
teamikl

2020/08/02 11:33

コメントに書かれたのを再度コピーして試してみましたが、 正常に動きます。win10/64bit Python 3.8.3 ターミナルで実行 問題が再現するコードを質問文で提示していただけますか。 また、style.layout(...) なしで正常に動作する点も確認してください。 File "<stdin>", line 1, ... 対話モード?該当の行が何処かわかりません。 ValueError: I/O operation on closed file can't invoke "event" command: application has been destroyed は破棄済みの tk に対して操作を行おうとしたときに起こります。
netz-eng

2020/08/02 12:57

ご返信ありがとうございます。 そちらでは正常に動いたとのことで、対話モードを起動し直したところ、フォーカス時の破線をなくすことができました。 お手数をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問