Skip to main content

Provides a chess board as a kivy widget.

Project description

ChessBoard - a Kivy Widget to interact with a Chess Board

This package provides a chess board as a kivy widget. It allows users to interact with the chess board by dragging and dropping pieces, and it can be integrated into Kivy applications.

The widget displays the current state of a chess.Board from the python-chess library. It supports highlighting specific moves and selecting squares. By design, it does not implement any game logic or enforce chess rules; it simply reflects the state of the provided chess.Board and notifies the host application of user interactions.

Exmaple Usage

See the documentation for more details and full API reference.

import chess
from kivy.app import App
from kivy.config import Config as KivyConfig
from kivy.logger import LOG_LEVELS, Logger
from kivy.uix.floatlayout import FloatLayout
from kivy.utils import platform

from kivy_chess_board import ChessBoard


class MyApp(App):
    def build(self):
        root = FloatLayout()
        cb = ChessBoard()
        root.add_widget(cb)

        # At any time we can set the board to a specific position and highlight
        # moves.
        cb.update(
            chess.Board(),
            moves_to_be_highlighted=[
                chess.Move.from_uci("e2e4"),
                chess.Move.from_uci("d2d4"),
            ],
            move_selector=0,  # e2e4 move appears "selected"
        )

        cb.process_square_selection = process_square
        cb.process_move_selection = process_move
        return root


def process_square(cb: ChessBoard, pos: chess.Square) -> None:
    """Callback to process square selections (clicks as well as drag-and-drop)."""
    square_name = chess.square_name(pos)
    Logger.debug(f"App: Square selected: {square_name}")


def process_move(cb: ChessBoard, move: chess.Move) -> None:
    """Callback to process move selection."""
    if move not in cb.board.legal_moves:
        Logger.warning("App: Illegal move")
        return

    cb.board.push(move)
    cb.update()
    cb.moves_to_be_highlighted = [move]  # highlight last move


def adjust_kivy_config() -> None:
    """Remove weird touchpad behavior on Linux.

    This is a bug in Kivy itself, not specific to this progream."""
    if platform != "linux":
        return

    if KivyConfig is None or not KivyConfig.has_section("input"):
        return

    for opt in list(KivyConfig.options("input")):
        if KivyConfig.get("input", opt) == "probesysfs":
            KivyConfig.remove_option("input", opt)


Logger.setLevel(LOG_LEVELS["debug"])
adjust_kivy_config()
MyApp().run()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kivy_chess_board-0.2.0.tar.gz (333.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kivy_chess_board-0.2.0-py3-none-any.whl (339.0 kB view details)

Uploaded Python 3

File details

Details for the file kivy_chess_board-0.2.0.tar.gz.

File metadata

  • Download URL: kivy_chess_board-0.2.0.tar.gz
  • Upload date:
  • Size: 333.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.22.2","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kivy_chess_board-0.2.0.tar.gz
Algorithm Hash digest
SHA256 13a09d9004197c8cba43556891bab53d7112810aa41ba60abb7c36363b5a0c51
MD5 011a9fef5a0712f4f133b5cf9df82006
BLAKE2b-256 80928557fe17043cb550ebaf7919b5293c45aa46071443848f34a5e1446ab935

See more details on using hashes here.

File details

Details for the file kivy_chess_board-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: kivy_chess_board-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 339.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.22.2","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kivy_chess_board-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 261ab5325f571e8a65a49638cdbf6fc4521d1101b27a39b0553f48706c244d66
MD5 78748806fac3ee1e5c08c0f8280592f5
BLAKE2b-256 6c3b88adff18ffe8f1ce7df6f21ee441da00a18e622bbb69fb69de85b5cac057

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page