tkinter画布:文本对象可变字体大小?

2024-06-30 08:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我用tkinter画布制作了一些漂亮的图片,并将文本覆盖在圆圈上,如下图所示:

http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2012/11/6/1352220546059/Causes-of-deaths-graphic-008.jpg

我希望字体大小与圆圈大小所依赖的数字相同。在

tempfont = tkFont.Font(family='Helvetica',size=int(round(ms*topnode[1])))
self.display.create_text(center[0],center[1],fill = "#FFFFFF",text = int(round(ms*topnode[1])),font = tempfont)

我的问题是,当我使用上述代码时,覆盖的文本对于每个文本对象都是一个常量大小。文本本身是正确的,因为它显示了我想要的字体大小的数字,只是字体大小不正确。我尝试过在大小定义中放入常量整数(按预期工作),并在上面两行代码之后立即添加del(tempfont),但我还没有找到解决这个问题的方法。在

我做错什么了?在

下面是一个独立的小程序,它再现了这个问题:

^{pr2}$

要点是recurtext递归地调整字体大小,shows写出该大小的字体大小。。。或者我觉得应该。也许这是tkinter的一个错误,但我仍然抱着一些希望,我就是那个在逻辑上犯了错误的人。在


Tags: 代码text文本tkinter错误数字msint
1条回答
网友
1楼 · 发布于 2024-06-30 08:26:45

我以前从未遇到过这种行为;它看起来像是一个Tkinter bug。好消息是,似乎有一个解决办法。如果你给每个字体一个唯一的名字,问题似乎就消失了。在

以下示例显示了多行,每行的字体大小不同:

import Tkinter as tk
import tkFont

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.display = tk.Canvas(self, width=400, height=600, background="black")
        self.display.pack(side="top", fill="both", expand=True)
        y = 10
        for size in range (2, 38, 2):
            tempfont = tkFont.Font(family='Helvetica',size=size, 
                                   name="font%s" % size)
            self.display.create_text(10, y, fill = "#FFFFFF",text = size, 
                                     font = tempfont, anchor="nw")
            y = y + tempfont.metrics()["linespace"]

if __name__ == "__main__":
    root = tk.Tk()
    frame = Example(parent=root)
    frame.pack(side="top", fill="both", expand=True)

    root.mainloop()

相关问题 更多 >