A companion library providing beautiful, modern, scalable, and fully theme-aware Qt (PySide6) widgets for the persian-jalali-calendar library.
This library provides a set of professional date and time selection widgets designed for a native Persian user experience, including Right-to-Left layout, Persian numerals, and a custom Persian font.
When you install this library, the core persian-jalali-calendar will be installed automatically as a dependency.
pip install jalali-calendar-qtThe included BNazanin.ttf font file will be used automatically.
The library provides three main "edit" widgets for easy integration.
JalaliDateEdit: A compact input for selecting a date.JalaliTimeEdit: For selecting a time. Can be configured for 12-hour or 24-hour mode.JalaliDateTimeEdit: A combined editor for both date and time.
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QFormLayout
from jalali_calendar_qt import (
JalaliDateEdit, JalaliTimeEdit, JalaliDateTimeEdit
)
# Standard application setup
app = QApplication(sys.argv)
window = QMainWindow()
central_widget = QWidget()
layout = QFormLayout(central_widget)
window.setCentralWidget(central_widget)
# Create the widgets
date_editor = JalaliDateEdit()
time_editor_12h = JalaliTimeEdit(use_12h=True)
datetime_editor = JalaliDateTimeEdit() # Default is 24-hour time
# Add them to the layout
layout.addRow("Date:", date_editor)
layout.addRow("Time (12h):", time_editor_12h)
layout.addRow("Date & Time (24h):", datetime_editor)
# Connect to signals to get the selected values
date_editor.dateSelected.connect(lambda d: print(f"Date selected: {d}"))
time_editor_12h.timeSelected.connect(lambda t: print(f"Time selected: {t}"))
datetime_editor.dateTimeSelected.connect(
lambda dt: print(f"DateTime selected: {dt}")
)
window.show()
sys.exit(app.exec())All picker widgets can be fully customized using a Theme object and a scale factor. The __init__ signature for the edit widgets is:
JalaliTimeEdit(parent=None, theme: Theme = None, scale: float = 1.0, use_12h: bool = False)
(This signature is similar for JalaliDateEdit and JalaliDateTimeEdit)
from jalali_calendar_qt import JalaliDateTimeEdit, Theme
# 1. Define a custom theme by overriding default colors
# You can provide any valid hex color string.
fire_theme = Theme(
widget_bg="#263238", # Dark Gray
text="#FFFFFF",
dimmed_text="#90A4AE",
calendar_highlight_bg="#FF7043", # Deep Orange
calendar_highlight_text="#263238",
clock_hand="#FFC107", # Amber
clock_hand_center="#FF8F00", # Dark Amber
clock_border="#607D8B",
clock_tick="#B0BEC5",
clock_inner_bg="#37474F",
clock_outer_bg="#455A64",
)
# 2. Create the widget with your custom theme and scale
custom_datetime_edit = JalaliDateTimeEdit(
theme=fire_theme, # Apply the theme
scale=1.2, # Make it 120% larger
use_12h=True # Use the 12-hour clock face
)
# The popup will now have your custom "fire" theme!Customizable Theme Attributes:
widget_bg: The main background of the picker popups.text: The primary text color (e.g., clock numbers, month names).dimmed_text: The color for inactive text (e.g., other rings on the 24h clock).calendar_highlight_bg: The background for the selected day in the calendar.calendar_highlight_text: The text color for the selected day.clock_hand: The color of the clock's hands.clock_hand_center: The color of the small circle in the middle of the clock.clock_tick: The color of the tick marks around the clock.clock_border: The color of the borders around the clock faces.clock_inner_bg: The background color of the inner clock ring (or the whole face in 12h mode).clock_outer_bg: The background color of the outer 24h clock ring.
This project is licensed under the MIT License.