【问题标题】:Getting the default font in Tkinter在 Tkinter 中获取默认字体
【发布时间】:2017-11-12 17:05:24
【问题描述】:

我正在运行 Python 3.6,想知道是否有办法获取 Tkinter 使用的默认字体,更具体地说,是调用 canvas.create_textCanvas 对象使用的默认字体。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    来自文档here

    Tk 8.0 自动将 Courier、Helvetica 和 Times 映射到其在所有平台上对应的原生姓氏。

    我找不到说明 canvas.create_text 的默认字体是什么的文档,但它应该是上面引用中列出的 3 种字体之一。

    【讨论】:

      【解决方案2】:

      idlelib/help.py 有这一行:

          normalfont = self.findfont(['TkDefaultFont', 'arial', 'helvetica'])
      

      findfont 是这样定义的:

      def findfont(self, names):
          "Return name of first font family derived from names."
          for name in names:
              if name.lower() in (x.lower() for x in tkfont.names(root=self)):
                  font = tkfont.Font(name=name, exists=True, root=self)
                  return font.actual()['family']
              elif name.lower() in (x.lower()
                                    for x in tkfont.families(root=self)):
                  return name
      

      (这不是我写的。)

      https://www.tcl.tk/man/tcl8.6/TkCmd/font.htm 是关于字体功能的终极文档。

      【讨论】:

        【解决方案3】:

        我相信这会解决你的问题。

        from tkinter import *
        
        
        janela = Tk()
        label = Label(janela)
        print(label["font"])
        

        【讨论】:

          【解决方案4】:

          是的。用于在画布上创建文本对象的默认字体是“TkDefaultFont”

          from tkinter import *
          r = Tk()
          c = Canvas(r)
          c.pack()
          id = c.create_text(10, 10, text='c')
          def_font = c.itemconfig(id, 'font')[-2] # [-2] is default, [-1] is current
          print(def_font, c.itemconfig(id)) # to see all the config info
          

          如果您想修改该默认字体,您可以使用nametofont() 来访问底层字体对象,然后对其进行操作:

          from tkinter import font
          def_font_obj = font.nametofont(def_font)
          def_font_obj.config(...)
          

          如果您不想自定义默认字体,可以根据当前字体创建一个新的命名字体,然后使用修改它

          current_font = c.itemconfig(id, 'font')[-1] # or just c.itemcget(id, 'font')
          new_named_font = font.Font(font=current_font).config(...)
          

          然后将 new_named_font 作为字体选项传递给任何小部件配置。

          【讨论】:

            猜你喜欢
            • 2020-10-14
            • 2013-03-05
            • 2011-10-31
            • 2014-05-02
            • 1970-01-01
            • 2021-09-23
            • 1970-01-01
            • 2011-06-26
            • 2012-06-16
            相关资源
            最近更新 更多