gpt4 book ai didi

python - 更改字体大小时如何使条目小部件的标签位置正确更新?

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:45 24 4
gpt4 key购买 nike

我正在创建一个 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()

这很好用,除了条目(和组合框)内的标签。文本本身会调整大小,但标签不会,直到文本被编辑。这使得文本条目看起来很奇怪。

这里是启动状态

normal text setting, nothing weird

然后点了tiny之后就乱了

text is tiny, but sizing is off

然后按退格键修复

sizing is fixed after editing text

我该如何解决这个问题?或者,我怎样才能更正确地做到这一点,使其在没有变通办法的情况下工作?我在 Windows 10 上,使用 Python 3.6.3 64 位,如果有帮助的话。

编辑:我做了一个例子给大家戳

最佳答案

经过一些测试,它似乎只发生在ttk.Entry,而不是tk.Entry。至少有两种解决方法:

  1. 在字号改变后在条目中插入然后删除文本
  2. 在字号改变后重新配置条目的字体

这是一个例子:

import tkinter as tk
from tkinter import ttk
import tkinter.font as tkfont

def change_fontsize():
font.configure(size=30)

def change_fontsize_1():
font.configure(size=20)
# workaround 1
entry.insert(0, ' ')
entry.delete(0)

def change_fontsize_2():
font.configure(size=5)
# workaround 2
entry.configure(font=font)


root = tk.Tk()

font = tkfont.Font(root)
entry = ttk.Entry(root, font=font)
entry.insert(0, 'Entry Text')
entry.pack()

ttk.Button(root, text='Change size, no workaround', command=change_fontsize).pack()
ttk.Button(root, text='Change size, workaround 1', command=change_fontsize_1).pack()
ttk.Button(root, text='Change size, workaround 2', command=change_fontsize_2).pack()

root.mainloop()

关于python - 更改字体大小时如何使条目小部件的标签位置正确更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47424052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com