我正在使用tkinter画布制作漂亮的照片,并在圆圈上方叠加文字,如下图所示:
我希望字体大小取决于圆圈大小所依赖的相同数字。
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),但我还没有找到解决这个问题的方法。 / p>
我做错了什么?
这是一个自包含的小程序,可以重现问题:
from Tkinter import *
import tkFont
class TestApp(Frame):
def __init__(self, master=None, height = 160, width = 400):
Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.display = Canvas(self, width = 800, height = 320, bg = "#FFFFFF")
self.display.grid(row=0,column=0)
def recurtext(tsize):
if tsize > 20:
recurtext(tsize-10)
tempfont = tkFont.Font(family='Helvetica',size=tsize)
self.display.create_text(800 - (tsize*12),160, text = str(tsize), font = tempfont)
recurtext(60)
app = TestApp()
app.master.title("Test")
app.mainloop()
要点是recurtext
递归地调整字体大小,shows
写出该大小的字体大小......或者我认为它应该。也许这是tkinter的一个错误,但我仍然希望我在这里的逻辑中犯了一个错误。
答案 0 :(得分:1)
我以前从未遇到过这种行为;它看起来像一个Tkinter错误。好消息是,似乎有一种解决方法。如果你给每个字体一个唯一的名称,问题似乎就会消失。
以下示例显示了多行,每行都有不同的字体大小:
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()