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

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

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

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

Python

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

Q&A

解決済

1回答

3516閲覧

【Python】ttk.LabelFrameのフォント、枠について

netz-eng

総合スコア105

Tkinter

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

Python

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

0グッド

0クリップ

投稿2020/09/07 14:09

編集2020/09/07 15:19

前提・実現したいこと

tkinterを用いてGUIの作成をしています。
ttk.LabelFrameを用いてフレームの入れ子構造を作りたいのですが、以下の点が解消できません。

LabelFrameのラベルフォント及びサイズが変更できない
・LabelFrameのラベル背景の色の変更方法が分からない
・LabelFrameの枠が表示されない

エラーメッセージはなく、単純に実現ができていない状況です。
下記コードを実行すると、このようなGUIが作成されます。

イメージ説明
イメージ説明

上のようなGUIの実現法にお心当たりのある方、是非ご回答をよろしくお願いします。

該当のソースコード

import tkinter as tk from tkinter import ttk import tkinter.font as font #tk root = tk.Tk() root.focus_force() root.resizable(False, False) root.title("") # 事前準備 pad = {"padx":5, "pady":5} we = tk.W + tk.E cen = tk.CENTER fon = font.Font(root, family="游明朝 Demibold", size=12) # フレーム LFrameStyle = ttk.Style() LFrameStyle.theme_use("default") LFrameStyle.configure("Dict.TLabelframe.Label", font=("游明朝 Demibold", "12", "Normal"), background="gray94", foreground="black", relief="ridge") fra_Rgst = ttk.LabelFrame(root, relief="ridge", labelanchor="nw", text="LabelFrame", style="Dict.TLabelframe.Label") fra1 = tk.Frame(fra_Rgst, cnf=pad) # ①AAAラベル&テキストボックス lbl1 = ttk.Label(fra1, background="gray94", text="AAA", font=fon) lbl1.grid(row=0, column=0, cnf=pad, sticky=we) ent1 = tk.Entry(fra1, width=20, font=fon) ent1.insert(tk.END, "A") ent1.grid(row=1, column=0, cnf=pad, sticky=we) Word_List = [] # ②BBBラベル&テキストボックス lbl2 = ttk.Label(fra1, background="gray94", text="BBB", font=fon) lbl2.grid(row=3, column=0, cnf=pad, sticky=we) ent2 = tk.Entry(fra1, width=20, font=fon) ent2.insert(tk.END, "B") ent2.grid(row=4, column=0, cnf=pad, sticky=we) lbl2_void = ttk.Label(fra1, background="gray94", text="") lbl2_void.grid(row=5, column=0, cnf=pad, sticky=we) Abb_List = [] # ③CCCラベル&テキストボックス lbl3 = ttk.Label(fra1, background="gray94", text="CCC", font=fon) lbl3.grid(row=6, column=0, cnf=pad, sticky=we) ent3_1 = tk.Entry(fra1, width=20, font=fon) ent3_1.insert(tk.END, "C") ent3_1.grid(row=7, column=0, cnf=pad, sticky=we) lbl3_void = ttk.Label(fra1, background="gray94", text="") lbl3_void.grid(row=8, column=0, cnf=pad, sticky=we) Frgn_List = [] # ④DDDラベル&テキストボックス lbl4 = ttk.Label(fra1, background="gray94", text="DDD", font=fon) lbl4.grid(row=6, column=1, cnf=pad, sticky=we) ent4_1 = tk.Entry(fra1, width=20, font=fon) ent4_1.insert(tk.END, "D") ent4_1.grid(row=7, column=1, cnf=pad, sticky=we) lbl4_void = ttk.Label(fra1, background="gray94", text="") lbl4_void.grid(row=8, column=1, cnf=pad, sticky=we) Lang_List = [] # フレーム綴じる fra1.columnconfigure([1, 3, 5], weight=1) fra1.rowconfigure([0, 1, 2], weight=1) fra1.pack(expand=False, fill="x", padx=10) fra_Rgst.columnconfigure([1, 3, 5], weight=1) fra_Rgst.rowconfigure([0, 1, 2], weight=1) fra_Rgst.pack(expand=False, fill=tk.BOTH, padx=10, pady=10) # 終了 def on_closing(): root.destroy() root.protocol("WM_DELETE_WINDOW", on_closing) root.mainloop()

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

Windows10
tk 8.6.10

追記 -LabelFrameの枠の生成・ラベルのサイズについて

上記コード内のStyle宣言の部分を、

python

1"Dict.TLabelframe.Label" --> "Dict.TLabelframe"

にしたところ、枠が表示され、ラベルのフォントサイズも指定したものになりました。

フレームに表示するラベルのフォント及び背景色についてはまだ解決できていないので、ご協力いただけると助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

イメージ説明

  • ttk.TLabelframe には style="Dict.TLabelframe" と指定します
    .Label は TLabelframe の子要素です。
  • スタイル定義で "Dict.TLabelframe.Label" を指定します

python

1LFrameStyle.configure("Dict.TLabelframe.Label", 2 font=("游明朝 Demibold", "12"))

投稿2020/09/07 15:22

teamikl

総合スコア8664

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

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

netz-eng

2020/09/07 16:06

ご回答ありがとうございます。 なるほど、子要素というものがあるんですね。 教えていただいた内容を元に、スタイル定義の部分を以下のように書いたところ、うまく表示されるようになりました! ``` LFrameStyle.configure("Dict.TLabelframe", background="gray94") LFrameStyle.configure("Dict.TLabelframe.Label", font=("游明朝 Demibold", "12"), background="gray94", foreground="black", relief="ridge") fra_Rgst = ttk.LabelFrame(root, labelanchor="nw", text="LabelFrame", style="Dict.TLabelframe") ``` フレーム部分とラベル部分の定義を混同していたようです。 自分だけでは解決できなかったので、本当に助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問