tkinter ttk GUI를 만들고 GUI 크기를 선택하는 라디오 버튼을 만들었습니다. 이것은 전체 응용 프로그램의 전역 글꼴 크기를 변경합니다.글꼴 크기를 변경할 때 입력 위젯의 레이블 위치를 올바르게 업데이트하려면 어떻게합니까?
나는 그것을 보여주기 위해 빠른 스크립트를 만들었습니다.
import tkinter as tk
from tkinter import ttk
import tkinter.font
UI_SIZES = ["Tiny", "Small", "Normal", "Large", "Huge"]
TINY_FONT_SIZE = 8
SMALL_FONT_SIZE = 12
NORMAL_FONT_SIZE = 16
LARGE_FONT_SIZE = 18
HUGE_FONT_SIZE = 22
root = tk.Tk()
ui_size = tk.StringVar(root, "Normal")
entry_text = tk.StringVar(root, "Entry Text")
def text_size_callback(*_args):
"""change the program font size when the font_size variable changes"""
font = tkinter.font.nametofont("TkDefaultFont")
selected_size = ui_size.get()
if selected_size == "Tiny":
font.configure(size=TINY_FONT_SIZE)
elif selected_size == "Small":
font.configure(size=SMALL_FONT_SIZE)
elif selected_size == "Normal":
font.configure(size=NORMAL_FONT_SIZE)
elif selected_size == "Large":
font.configure(size=LARGE_FONT_SIZE)
elif selected_size == "Huge":
font.configure(size=HUGE_FONT_SIZE)
root.option_add("*Font", font)
ui_size.trace('w', text_size_callback)
ui_size.set("Normal")
ui_radio_group = ttk.Frame(root)
ui_size_radios = []
for sizeval in UI_SIZES:
ui_size_radios.append(ttk.Radiobutton(
ui_radio_group,
text=sizeval,
variable=ui_size,
value=sizeval
))
text_entry = ttk.Entry(ui_radio_group, textvariable=entry_text)
i = 0
for sizeradio in ui_size_radios:
sizeradio.grid(row=i, column=0, sticky=tk.W)
i += 1
text_entry.grid(row=2, column=1)
ui_radio_group.pack()
root.mainloop()
항목 (및 콤보 상자) 안의 레이블을 제외하면 잘 작동합니다. 텍스트 자체가 크기는 조정되지만 텍스트는 편집 될 때까지 레이블에 표시되지 않습니다. 이렇게하면 텍스트 항목이 이상하게 보입니다. 여기
그것은 시작에
내가 백 스페이스
공격 후 다음 작은그런 다음 고정을 클릭 한 후 엉망
어떻게이 문제를 해결할 수 있습니까? 또는이 작업을보다 정확하게 수행하면 어떻게 해결할 수 있습니까? 도움이된다면 Python 3.6.3 64 비트를 사용하여 Windows 10을 사용 중입니다.
편집은 : 당신이 모두 몇 가지 테스트 후
'grid()'또는'pack()'을 사용합니까? – furas
맨 위는'pack()'을 사용하고 맨 아래는'grid()'를 사용합니다 – DTreth
항목 안의 레이블로 무엇을 의미합니까, 텍스트를 의미하지 않습니까? – Nae