Skip to content

thisal-d/tkchart

Chinese

tkchart

A Python library for creating live-updating line charts in Tkinter.

PyPI version

Downloads Downloads last 6 month Downloads/Month Downloads/Week

License: MIT


Chart.1.mp4

✨ Features

Feature Description
Live Updates Stream and display real-time data continuously
📉 Multiple Lines Plot several lines on the same chart for easy comparison
🎨 Color Customization Tailor colors to match your app's design
🔤 Font Customization Adjust text fonts for better readability
📐 Dimension Control Resize charts to fit any layout
🎛️ Granular Config Fine-grained control via configure_*() methods (v2.2.0+)

📋 See what's new in the latest release →


📦 Installation

pip install tkchart
import tkchart

🚀 Quick Start

import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()

# 1. Create the chart
chart = tkchart.LineChart(
    master=root,
    x_axis_values=("a", "b", "c", "d", "e", "f"),
    y_axis_values=(100, 900)
)
chart.place(x=10, y=10)

# 2. Create a line
line = tkchart.Line(master=chart)

# 3. Stream data in a background thread
def loop():
    while True:
        chart.show_data(line=line, data=[random.choice(range(100, 900))])
        time.sleep(1)

threading.Thread(target=loop, daemon=True).start()
root.mainloop()

🎬 Live Examples

1 — Simple

1.mp4
View code
import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()
root.configure(bg="#0d1117")
root.geometry("720x430+200+200")

line_chart = tkchart.LineChart(
    master=root,
    x_axis_values=("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10"),
    y_axis_values=(0, 1000)
)
line_chart.pack(pady=15)

line = tkchart.Line(master=line_chart)

def display_data():
    while True:
        line_chart.show_data(line=line, data=[random.choice(range(0, 1000))])
        time.sleep(0.5)

threading.Thread(target=display_data, daemon=True).start()
root.mainloop()

2 — Styled & Filled Line

2.mp4
View code
import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()
root.configure(bg="#0d1117")
root.geometry("720x430+200+200")

line_chart = tkchart.LineChart(
    master=root,
    x_axis_values=("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10"),
    y_axis_values=(0, 1000),
    y_axis_label_count=10,
)
line_chart.pack(pady=15)

line = tkchart.Line(
    master=line_chart,
    size=2,
    fill="enabled"
)

def display_data():
    while True:
        line_chart.show_data(line=line, data=[random.choice(range(0, 1000))])
        time.sleep(0.5)

threading.Thread(target=display_data, daemon=True).start()
root.mainloop()

3 — 2 Lines with Different Styles

3.mp4
View code
import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()
root.configure(bg="#0d1117")
root.geometry("720x430+200+200")

line_chart = tkchart.LineChart(
    master=root,
    x_axis_values=("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10"),
    y_axis_values=(0, 1000),
    y_axis_label_count=10,
)
line_chart.pack(pady=15)

line1 = tkchart.Line(
    master=line_chart,
    color="#5dffb6",
    size=2,
    style="dashed",
    style_type=(10, 5),
)

line2 = tkchart.Line(
    master=line_chart,
    color="#FFBAD2",
    size=2,
    point_highlight="enabled",
    point_highlight_color="#FFBAD2",
)

def display_data():
    while True:
        line_chart.show_data(line=line1, data=[random.choice(range(0, 1000))])
        line_chart.show_data(line=line2, data=[random.choice(range(0, 1000))])
        time.sleep(0.5)

threading.Thread(target=display_data, daemon=True).start()
root.mainloop()

4 — 3 Lines with Different Styles

4.mp4
View code
import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()
root.configure(bg="#0d1117")
root.geometry("720x430+200+200")

line_chart = tkchart.LineChart(
    master=root,
    x_axis_values=("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10"),
    y_axis_values=(0, 1000),
    y_axis_label_count=10,
)
line_chart.pack(pady=15)

line1 = tkchart.Line(master=line_chart, size=2, fill="enabled")

line2 = tkchart.Line(
    master=line_chart,
    color="#5dffb6",
    size=2,
    style="dashed",
    style_type=(10, 5),
)

line3 = tkchart.Line(
    master=line_chart,
    color="#FFBAD2",
    size=2,
    point_highlight="enabled",
    point_highlight_color="#FFBAD2",
)

def display_data():
    while True:
        line_chart.show_data(line=line1, data=random.choices(range(0, 1000), k=1))
        line_chart.show_data(line=line2, data=random.choices(range(0, 1000), k=1))
        line_chart.show_data(line=line3, data=random.choices(range(0, 1000), k=1))
        time.sleep(0.5)

threading.Thread(target=display_data, daemon=True).start()
root.mainloop()

5 — With Grid Sections

5.mp4
View code
import tkinter as tk
import tkchart
import random
import threading
import time

root = tk.Tk()
root.configure(bg="#0d1117")
root.geometry("720x430+200+200")

line_chart = tkchart.LineChart(
    master=root,
    x_axis_values=("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10"),
    y_axis_values=(0, 1000),
    y_axis_label_count=10,
    y_axis_section_count=10,
    x_axis_section_count=10,
)
line_chart.pack(pady=15)

line1 = tkchart.Line(
    master=line_chart,
    color="#5dffb6",
    size=2,
    style="dashed",
    style_type=(10, 5),
)

line2 = tkchart.Line(
    master=line_chart,
    color="#FFBAD2",
    size=2,
    point_highlight="enabled",
    point_highlight_color="#FFBAD2",
)

def display_data():
    while True:
        line_chart.show_data(line=line1, data=[random.choice(range(0, 1000))])
        line_chart.show_data(line=line2, data=[random.choice(range(0, 1000))])
        time.sleep(0.5)

threading.Thread(target=display_data, daemon=True).start()
root.mainloop()

📚 Documentation

Explore all parameters, configuration methods, and advanced usage:


👥 Contributors