gpt4 book ai didi

python - Tkinter 如何调整字体大小并保持对齐

转载 作者:行者123 更新时间:2023-12-01 20:20:27 26 4
gpt4 key购买 nike

我正在编写一个需要可缩放的应用程序。使用默认的系统字体“TkDefaultFont 和 TkTextFont”,我增加了它们的大小,并得到了我想要的结果。问题是调整大小后,字段标签和字段小部件之间的对齐方式被取消。我尝试过应用 update_idletasks() 但它没有任何作用。将鼠标移到小部件上可以修复问题,如视频中所示。如果您运行下面的示例,请转到尺寸旋转框并更改尺寸以查看问题。

我的开发系统是Linux,桌面KDE,我不知道这是否是操作系统问题。

该问题的短视频链接。 Video of Alignment Issue.

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

root = tk.Tk()
root.rowconfigure(0, weight=1)
root.columnconfigure(99, weight=1)


frame = ttk.Frame(root)
frame.rowconfigure(0, weight=1)
frame.columnconfigure(0, weight=1)

cbo = ttk.Combobox(frame)
cbo.config(
values=('Test 1', 'Test 2', 'Test 3')
)
cbo.set(value='Test 1')

ent_var = tk.StringVar()
ent = ttk.Entry(frame, textvariable=ent_var)
ent_var.set('Test')


lb_size = ttk.Label(frame, text='size')
spn = ttk.Spinbox(frame, values=tuple(range(1, 101)))

font1 = tkfont.nametofont('TkDefaultFont')
font2 = tkfont.nametofont('TkTextFont')

lbl_field_name = tk.Label(frame, text='Field Name')
lbl_field_name.grid()


def size(e):
cfg = font1.actual()
cfg['size'] = e.widget.get()
font1.configure(**cfg)
font2.configure(**cfg)


spn.bind('<<Increment>>', size)
spn.bind('<<Decrement>>', size)


cbo.grid(row=0, column=1, sticky=tk.NSEW)
ent.grid(row=0, column=2, sticky=tk.NSEW)
lb_size.grid(row=0, column=3, sticky=tk.NSEW)
spn.grid(row=0, column=4, sticky=tk.NSEW)
frame.grid(sticky=tk.NSEW)

root.mainloop()

最佳答案

我发现避免此问题的唯一方法是更改​​每个条目的 configure() 的字体方法。我想更简单的方法是将所有条目放入列表中,请参阅下面的代码。

我还注意到size()使用旋转框的前一个值,而不是递增/递减后的值。为了避免这种情况,我建议您使用 command旋转框的选项而不是绑定(bind)到 <<Increment>><<Decrement>> (参见下面的代码)。

最后,您不需要检索整个字体设置来更新大小,您可以简单地执行font1.configure(size=<newsize>) .

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

root = tk.Tk()
root.rowconfigure(0, weight=1)
root.columnconfigure(99, weight=1)


frame = ttk.Frame(root)
frame.rowconfigure(0, weight=1)
frame.columnconfigure(0, weight=1)

entries = [] # list of all entries

cbo = ttk.Combobox(frame)
cbo.config(
values=('Test 1', 'Test 2', 'Test 3')
)
cbo.set(value='Test 1')
entries.append(cbo)

ent_var = tk.StringVar()
ent = ttk.Entry(frame, textvariable=ent_var)
ent_var.set('Test')
entries.append(ent)


def size():
size = spn.get() # get current spinbox's value
font1.configure(size=size)
font2.configure(size=size)
for e in entries: # update font in all entries
e.configure(font=font2)


lb_size = ttk.Label(frame, text='size')
# use the command option to update the font size
spn = ttk.Spinbox(frame, command=size, values=tuple(range(1, 101)))

font1 = tkfont.nametofont('TkDefaultFont')
font2 = tkfont.nametofont('TkTextFont')

lbl_field_name = ttk.Label(frame, text='Field Name')
lbl_field_name.grid()

cbo.grid(row=0, column=1, sticky=tk.NSEW)
ent.grid(row=0, column=2, sticky=tk.NSEW)
lb_size.grid(row=0, column=3, sticky=tk.NSEW)
spn.grid(row=0, column=4, sticky=tk.NSEW)
frame.grid(sticky=tk.NSEW)

root.mainloop()

关于python - Tkinter 如何调整字体大小并保持对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790541/

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