Docs
dev
program structure

Program structure of Gambit-Pairing

Project Structure

.
├── docs
│   ├── before_you_commit.md
│   ├── HACKING.md
│   ├── installing.md
│   ├── manual-pairing-guide.md
│   ├── program-structure.md
│   ├── project_formatting.md
│   └── screenshots
├── Gambit-Pairing.spec
├── install_editable_pip.sh
├── licenses
│   ├── LICENSE
│   └── license.rtf
├── make_executable.py
├── make_executable.sh
├── pyproject.toml
├── README.md
├── resources
│   ├── scripts
│   │   └── format_project.py
│   └── unused_designs
├── src
│   ├── gambitpairing
│   │   ├── core
│   │   │   ├── api_utils.py
│   │   │   ├── constants.py
│   │   │   ├── exceptions.py
│   │   │   ├── init.py
│   │   │   ├── pairing_dutch_swiss.py
│   │   │   ├── pairing_round_robin.py
│   │   │   ├── player.py
│   │   │   ├── print_utils.py
│   │   │   ├── tournament.py
│   │   │   ├── updater.py
│   │   │   └── utils.py
│   │   ├── gui
│   │   │   ├── crosstable_tab.py
│   │   │   ├── dialogs
│   │   │   │   ├── about_dialog.py
│   │   │   │   ├── init.py
│   │   │   │   ├── manual_pairing_dialog.py
│   │   │   │   ├── new_tournament_dialog.py
│   │   │   │   ├── player_detail_dialog.py
│   │   │   │   ├── player_edit_dialog.py
│   │   │   │   ├── printing.py
│   │   │   │   ├── settings_dialog.py
│   │   │   │   ├── update_dialog.py
│   │   │   │   └── update_prompt_dialog.py
│   │   │   ├── dialogs.py
│   │   │   ├── history_tab.py
│   │   │   ├── init.py
│   │   │   ├── mainwindow.py
│   │   │   ├── notification.py
│   │   │   ├── notournament_placeholder.py
│   │   │   ├── players_tab.py
│   │   │   ├── standings_tab.py
│   │   │   ├── tournament_tab.py
│   │   │   └── update_worker.py
│   │   ├── init.py
│   │   ├── main.py
│   │   ├── resources
│   │   │   ├── icons
│   │   │   ├── init.py
│   │   │   ├── resource_utils.py
│   │   │   ├── scripts
│   │   │   └── styles.qss
│   │   └── test
│   │   ├── core
│   │   │   └── pairing_round_robin.py
│   │   ├── init.py
│   │   └── main.py
└── test_data
├── players
│   ├── test_16_rated_players.csv
│   └── test_45_rated_players.csv
└── tournaments
├── test_32_player_tournament.json
├── test_open_2025.json
└── winter_chess_championship_2025.json

43 directories, 198 files

in the gambitpairing module:

main.py -- entry point

  • Creates the main window. Handles various OS'.
  • from gui.mainwindow import GambitPairingMainWindow imports app

gui module -- contains the various components and QT widgets

mainwindow.py -- in charge of the main window

class GambitPairingMainWindow(QtWidgets.QMainWindow):

crosstable_tab.py

class CrosstableTab(QtWidgets.QWidget):

... This module contains the Qt Widgets

core module -- contains the business logic

utils.py -- logging and utility functions

updater.py -- Handles checking for and applying application updates from GitHub Releases.

player.py -- Represents a player in the tournament.

class Player:

tournament.py -- Manages the tournament state, pairings, results, and tiebreakers.

class Tournament:

constants.py -- what you think