【问题标题】:How to change font and size of buttons and frame in tkinter using python?如何使用 python 在 tkinter 中更改按钮和框架的字体和大小?
【发布时间】:2014-01-02 12:22:15
【问题描述】:

这是我用来在 tkinter 中生成一个简单的文本框和一个按钮的代码。

应该设置哪些参数才能更好地查看框架和按钮?

 root = Tk.Tk()

 def submit():
    query = entry.get()
    retrieve(query)
    entry = Tk.Entry(root)
    entry.pack()
    button = Tk.Button(root, text='submit', command=submit)
    button.pack()
    root.mainloop()             

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

    使用命令font = font.Font(size = 20) 更改按钮中文本的外观

    import tkinter.font as fnt
    import tkinter as tk
    r=tk.Tk()
    tk.Button(r,text = "Test", font = fnt.Font(size = 20))
    r.mainloop()
    

    【讨论】:

      【解决方案2】:

      更新:New Mexico Tech tkinter 网站已存档在 GitHub 上。

      首先,Tkinter 的最佳参考是this New Mexico Tech website。在目录中,您会找到section on fonts,在section on Button widgets 中,您会找到选项font

      你必须有一个 Tkinter 对象才能创建字体

      Python-2

      Support for Python-2 has officially ended as of Jan 1, 2020

      from Tkinter import *  # Note: UPPER case "T" in Tkinter
      import tkFont
      root = Tk()
      

      Python-3

      Python-3 Tk wrappers differ from Python-2

      from tkinter import *  # Note: lower case "t" in tkinter
      from tkinter import font as tkFont  # for convenience
      root = Tk()
      

      创建一个类似于 New Mexico Tech 网站示例的字体

      helv36 = tkFont.Font(family='Helvetica', size=36, weight='bold')
      # you don't have to use Helvetica or bold, this is just an example
      

      注意:为方便起见,Python-3 的召回 font 被导入为 tkFont

      现在您可以为原帖中Button 创建的button 设置字体

      button['font'] = helv36
      

      按钮的大小取决于您的几何管理器,例如:gridpack。 New Mexico Tech 网站的layouts section 中仅介绍了grid 方法,但effbot.org 也是一个很好的参考,他很好地涵盖了pack

      try:  # Python-2
          from Tkinter import *
          import tkFont
      except ImportError:  # Python-3
          from tkinter import *
          from tkinter import font as tkFont
      # using grid
      # +------+-------------+
      # | btn1 |    btn2     |
      # +------+------+------+
      # | btn3 | btn3 | btn4 |
      # +-------------+------+
      root = Tk()
      # tkFont.BOLD == 'bold'
      helv36 = tkFont.Font(family='Helvetica', size=36, weight=tkFont.BOLD)
      btn1 = Button(text='btn1', font=helv36)
      btn2 = Button(text='btn2', font=helv36)
      btn3 = Button(text='btn3', font=helv36)
      btn4 = Button(text='btn4', font=helv36)
      btn5 = Button(text='btn5', font=helv36)
      root.rowconfigure((0,1), weight=1)  # make buttons stretch when
      root.columnconfigure((0,2), weight=1)  # when window is resized
      btn1.grid(row=0, column=0, columnspan=1, sticky='EWNS')
      btn2.grid(row=0, column=1, columnspan=2, sticky='EWNS')
      btn3.grid(row=1, column=0, columnspan=1, sticky='EWNS')
      btn4.grid(row=1, column=1, columnspan=1, sticky='EWNS')
      btn5.grid(row=1, column=2, columnspan=1, sticky='EWNS')
      

      也可以试试ttk

      【讨论】:

      • ModuleNotFoundError: 第 1 行中没有名为 'tkFont' 的模块 :(
      • 对不起@AbdullahSaid 我将近 6 年前写的回复是针对 Python-2.7 的,所以我已经为 Python- 更新了它。使用 Python-3 时,您必须导入 tkinter.font 而不是 tkfont
      • 感谢@MarkMikofski 的回复,抱歉,我没有意识到这是 6 年前发布的,哈哈。昨天我真的很困惑,但是是的,我已经弄清楚了。但是,某些样式在 Windows 和 OSX 之间是不同的,尤其是关于网格内的按钮。我已经在两台操作系统(Windows 和 OSX)上尝试过,结果彼此之间存在巨大差异。在 OSX 中配置起来更加困难
      【解决方案3】:

      tkdocs tutorial 如果您想调整外观,建议使用命名字体和样式:

      import random
      try:
          import tkinter as Tk
          import tkinter.ttk as ttk
          import tkinter.font as font
      except ImportError: # Python 2
          import Tkinter as Tk
          import ttk
          import tkFont as font
      
      def change_font_family(query, named_font):
          named_font.configure(family=random.choice(font.families()))
      
      root = parent = Tk.Tk()
      root.title("Change font demo")
      
      # standard named font (everything that uses it will change)
      font.nametofont('TkDefaultFont').configure(size=5) # tiny
      
      # you can use your own font
      MyFont = font.Font(weight='bold')
      
      query = Tk.StringVar()
      ttk.Entry(parent, textvariable=query, font=MyFont).grid() # set font directly
      ttk.Button(parent, text='Change Font Family',  style='TButton', # or use style
                 command=lambda: change_font_family(query, MyFont)).grid()
      query.set("The quick brown fox...")
      
      # change font that widgets with 'TButton' style use
      root.after(3000, lambda: ttk.Style().configure('TButton', font=MyFont))
      # change font size for everything that uses MyFont
      root.after(5000, lambda: MyFont.configure(size=48)) # in 5 seconds
      root.mainloop()
      

      【讨论】:

      • 这行得通,但我怎样才能改变框架大小或重新定位框架中的按钮?是否有任何拖放界面可以在 python 上使用 Tkinter 正常工作?
      • @AbhijathBenhur:这是一份工作for a layout manager。请参阅@Mark Mikofski's answer 中的示例。我从来没有为 tkinter 界面使用过 GUI 构建器。您可以 ask 将其作为一个单独的问题。
      • Qt 与Python 绑定PyQt4 一起使用。它包括一个名为Qt Designer 的GUI 构建器。还有帮助和语言环境构建器(Qt Assistance 和 Qt Linguist)。注意 Qt Creator 是用于 C/C++ 和 Java 的 IDE。 Qt 是一个主流的现代 UI 框架,它使用 Qt Designer 自动生成的标记语言 QML 将 GUI、帮助和本地化从后端抽象出来。
      • ttk 使用 style 绝对是坚持使用 Tkinter 的方法。 ttk 看起来会比 Tkinter 小部件好得多,因为它旨在匹配 OS 风格。 EG:进度条看起来像 Windows 7 上的 Windows 7 进度条,Windows XP 上的 XP 进度条和带有 Gnome 桌面的 Linux 上的 Gnome 进度条等。恕我直言,不要使用tix;它已经 5 年没有更新了。
      猜你喜欢
      • 2015-06-16
      • 2018-09-27
      • 2021-07-18
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多