前提
def font_chooser()で変数font_aを作り、内側のdef fontget()でfont_aに値を入れて返したいのですが、fontget()内で値を入れることはできたのですが、
font_chooser内ではfont_aに値が入りません。font_aに値を入れる方法を教えてください。
もし、以上のように、font_get()の戻り値を、font_chooser()の戻り値にする方法が一般的でないなら、その一般的な方法をご教示ください。
また、今回は連想配列を使用しているのですが、event.widget['font']から、フォント名だけを取り出す方法があれば教えてください。
実現したいこと
内側の関数の戻り値を外側の関数の戻り値にする
ここに実現したいことを箇条書きで書いてください。
該当のソースコード
Python
1import tkinter as tk 2from tkinter import ttk 3import tkinter.font as font 4 5sty_lst = ["標準","BIZ UDGothic","#000000", "#F0F0F0","#F0F0F0","#F0F0F0","#000000", 6 "#FFFFFF","#F4F6FA","#BDD7EE","#5E86B7","#FFFFFF","#FFFFFF","#F4F6FA", 7 "#D8D8DA","#D8D8DA"] 8 9def font_chooser(): 10 font_a = '' 11 root_fontcho = tk.Tk() 12 root_fontcho.title("フォント選択") 13 root_fontcho.geometry("1300x900") 14 root_fontcho.configure(bg=sty_lst[3]) 15 16 def fontget(event): 17 nonlocal font_a 18 font_a = dic_a[event.widget] 19 print('def内:' + font_a) 20 21 def hover_a(event): 22 event.widget['bg'] = sty_lst[13] 23 def anhover_a(event): 24 event.widget['bg'] = sty_lst[3] 25 26 list = tk.font.families() # 使用できるフォントを代入 27 dic_a = {} 28 29 ia = 1 30 ib = 0 31 ic = 0 32 tmpia = 0 33 34 ntb = ttk.Notebook(root_fontcho) 35 r = (len(list) + 90 - 1) // 90 # タブ数 36 37 for _ in range(1,r + 1): #タブを作る回数 38 tab = tk.Frame(ntb) 39 ntb.add(tab, text=str(ia),underline=0) 40 ia += 1 41 ic = 0 42 43 for _ in range(1,91): 44 if ib == 30: 45 ib = 0 46 ic += 1 47 48 if len(list) <= tmpia: 49 break 50 lbl = tk.Label(tab, 51 text=list[tmpia] + ': ' + 'あいうえおABCDEFGHIJK', 52 font=(list[tmpia],10), 53 width=38, 54 anchor=tk.W) 55 lbl.grid(row=ib, column=ic,padx=1,pady=1) 56 dic_a[lbl] = list[tmpia] 57 lbl.bind("<Enter>", hover_a) 58 lbl.bind("<Leave>", anhover_a) 59 lbl.bind("<Double-1>", fontget) 60 ib += 1 61 tmpia += 1 62 63 ntb.pack(expand=True, fill='both', padx=10, pady=10) 64 65 print('defの外:' + font_a) 66 if not font_a == '': 67 print('if内:' + font_a) 68 root_fontcho.destroy() 69 return font_a 70 71 root_fontcho.mainloop() 72 73ftc = font_chooser() 74print('ftc:' + ftc) 75
試したこと
def font_chooser() で、 return fontget も試しましたが駄目でした
補足情報(FW/ツールのバージョンなど)
python 3.10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/16 11:34