python - 如何在“顶级”Tkinter 窗口内缩放标签字体大小?
问题描述
致力于在 tkinter 'Toplevel' 窗口中显示一些信息。我希望文本大小随着窗口大小的增加而增加。为此,我只是在顶级小部件中使用标签小部件。
我制作了一个在窗口调整大小事件期间触发的函数,并更新全局字体变量。
def showResults(self):
self.top = Toplevel(master = None, height=750,width=750, relief="sunken")
self.top.title("Results")
self.font = ("Times", 20, "bold")
self.fontSize = IntVar()
self.fontSize.set(20)
self.resultX = Label(self.top, text="Name: X", font=("Times", self.fontSize.get(), "bold")).pack(side = "left", fill = "both", expand=True)
self.top.bind('<Configure>', self.resize)
print(self.fontSize.get())
def resize(self, event):
self.fontSize.set(self.top.winfo_height())
我希望 self.fontSize 在调用 resize 后更新,但是,它没有被更新。但是,如果我在 showResults 中移动该打印语句以调整大小,它会打印更新后的大小。它只是不刷新标签小部件。任何人都知道一种简单的方法来“刷新”标签小部件以显示正确的信息?谢谢!
解决方案
您可以通过定义一个font.Font
对象并将其设置为Label
小部件的字体来做到这一点:
from tkinter import *
from tkinter import font
class Body(Frame):
def __init__(self,master=None,**kwargs):
super().__init__(master,**kwargs)
self.button = Button(self,text="Click",command=self.showResults)
self.button.pack()
def showResults(self):
self.font = font.Font(self.master, family="Times", size=20, weight="bold")
self.top = Toplevel(master=None, height=750, width=750, relief="sunken")
self.top.title("Results")
self.resultX = Label(self.top, text="Name: X", font=self.font)
self.resultX.pack(side="left",fill="both",expand=True)
self.update()
self.top.bind('<Configure>', self.resize)
def resize(self, event):
self.font['size'] = self.top.winfo_height()
root = Tk()
Body(root).pack()
root.mainloop()
推荐阅读
- excel - 需要插入变量以使用 vbs 脚本迭代 SAP 表。错误“列表分隔符”或“)”丢失不断出现。我错过了什么?
- ruby-on-rails - ActiveRecord:如何包含另一个基于 Enum 的模型?
- java - 将文件中的输入转换为对象引用
- python - 在 Python 的 string.format 中,%r 等价于什么?
- html - 旋转和移动元素
- symfony - 无法弄清楚如何制作我需要的正确存储库方法
- scala - Scala - 在不阻塞的情况下处理事务
- javascript - Ng-repeat 列表,其中包含重复元素的许多值的次数
- java - UML 到 Java 代码 - 多重性指标和大写变量
- python - 由于 SSL 模块错误,Pip3 不起作用