Measure the height of a string in Tkinter Python?

In Tkinter, you can measure the height of a string using the Font object and its metrics() method. Measuring string height is useful for text alignment, dynamic widget sizing, and canvas positioning.

Creating a Font Object

First, create a Font object to specify the font family, size, and style ?

import tkinter as tk
from tkinter.font import Font

root = tk.Tk()

# Create a font object with Arial font, size 16, and bold style
font = Font(family="Arial", size=16, weight="bold")
print("Font created:", font)
Font created: ('Arial', '16', 'weight=bold')

Measuring Single Line Height

Use the metrics("linespace") method to get the height of a single line ?

import tkinter as tk
from tkinter.font import Font

root = tk.Tk()

# Create a font object
font = Font(family="Arial", size=16, weight="bold")

# Measure the height of a line of text
line_height = font.metrics("linespace")
ascent = font.metrics("ascent")
descent = font.metrics("descent")

print(f"Line height: {line_height} pixels")
print(f"Ascent: {ascent} pixels")
print(f"Descent: {descent} pixels")
Line height: 19 pixels
Ascent: 15 pixels
Descent: 4 pixels

Measuring Multi-line String Height

For multi-line strings, multiply the line height by the number of lines ?

import tkinter as tk
from tkinter.font import Font

root = tk.Tk()

# Create a font object
font = Font(family="Arial", size=16, weight="bold")

# Create a multi-line string
text = "This is a\nmulti-line\nstring example."

# Calculate total height
line_height = font.metrics("linespace")
num_lines = len(text.splitlines())
total_height = line_height * num_lines

print(f"Text: {repr(text)}")
print(f"Number of lines: {num_lines}")
print(f"Line height: {line_height} pixels")
print(f"Total height: {total_height} pixels")
Text: 'This is a\nmulti-line\nstring example.'
Number of lines: 3
Line height: 19 pixels
Total height: 57 pixels

Font Metrics Methods

Method Description Use Case
linespace Total line height including spacing Multi-line text layout
ascent Distance from baseline to top Precise text positioning
descent Distance from baseline to bottom Handling descenders (g, j, p)

Practical Example

Here's how to use string height measurements in a real Tkinter application ?

import tkinter as tk
from tkinter.font import Font

root = tk.Tk()
root.title("String Height Demo")

# Create different fonts
small_font = Font(family="Arial", size=12)
large_font = Font(family="Arial", size=20, weight="bold")

# Sample texts
short_text = "Single line"
long_text = "This is a\nmulti-line text\nwith three lines"

# Measure heights
short_height = small_font.metrics("linespace")
long_height = large_font.metrics("linespace") * len(long_text.splitlines())

print(f"Small font line height: {short_height}px")
print(f"Large font multi-line height: {long_height}px")

# Create labels with measured heights
label1 = tk.Label(root, text=short_text, font=small_font, bg="lightblue")
label2 = tk.Label(root, text=long_text, font=large_font, bg="lightgreen")

label1.pack(pady=10)
label2.pack(pady=10)

root.mainloop()
Small font line height: 15px
Large font multi-line height: 72px

Conclusion

Use Font.metrics("linespace") to measure text height in Tkinter. For multi-line strings, multiply line height by the number of lines using splitlines(). These measurements help create precise text layouts and dynamic UI components.

Updated on: 2026-03-27T16:14:45+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements