BEdit Qt starter
A small desktop application scaffold using Python and PySide6 (the official Qt bindings). Its interface is maintained in Qt Designer and it includes a main window, menu bar, blank central workspace, common keyboard shortcuts, and persisted window geometry. The application forces Qt's light Fusion palette, so it remains light even when the operating-system theme is dark.
Run it
Python 3.10 or newer is required. From this directory:
python -m venv .venv
Activate the environment:
- Windows PowerShell:
.venv\Scripts\Activate.ps1 - Windows Command Prompt:
.venv\Scripts\activate.bat - Linux/macOS:
source .venv/bin/activate
Then install and launch:
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
python -m bedit
After installation, the bedit command also launches the application.
Project layout
.
├── pyproject.toml dependencies, package metadata, and `bedit` command
├── README.md
├── ui/main_window.ui editable Qt Designer source
└── src/bedit
├── __main__.py supports `python -m bedit`
├── app.py starts Qt and applies the forced light palette
├── main_window.py behavior and signal connections
└── ui_main_window.py generated from the Designer file; do not hand-edit
Designing the UI further
The project now uses Qt Designer. It is included with PySide6 on most installations. Open the existing form with:
pyside6-designer ui/main_window.ui
In Designer, use the Widget Box to add controls, the Object Inspector to select them, and the Property Editor to name and configure them. Always put widgets in a layout (horizontal, vertical, grid, or form) so the window resizes correctly.
Save the form, close the running application if necessary, then regenerate its Python wrapper:
pyside6-uic ui/main_window.ui -o src/bedit/ui_main_window.py
Do not hand-edit the generated Python file; change the .ui file and regenerate
it. Add behavior and signal connections in main_window.py. Widget names from
Designer are available there through self.ui, such as self.ui.editor.
In VS Code, the same commands are available through Terminal → Run Task:
- Qt: Open Main Window in Designer opens the form for visual editing.
- Qt: Build Designer Files compiles resources and then regenerates the UI
wrapper. It is the default build task, available with
Ctrl+Shift+B. - The separate resource and UI compilation tasks remain available when only one generated file needs rebuilding.
A sensible next design pass
- Sketch the main tasks and screens before choosing widgets.
- Turn each major area into its own widget class in
src/bedit/widgets/. - Use a
QStackedWidgetfor page-like navigation, orQDockWidgetfor movable tool panels in an editor-style application. - Use reusable
QActionobjects for menu commands and any future toolbars. - Keep file/data operations outside widget classes as the application grows.
- Add icons through a Qt resource file (
.qrc) so packaging is reliable. - Test on Windows regularly; fonts, scaling, and native dialogs vary by platform.
Optional tools
You do not need another GUI framework. Useful additions are:
- Qt Designer for drag-and-drop form layout.
- Ruff for formatting/linting (
ruff check .). - pytest-qt later for GUI interaction tests.
- PyInstaller or Nuitka later to produce a Windows
.exe.
The light colors are defined in apply_light_theme() in src/bedit/app.py.
Adjust that palette if you want different light colors. Avoid a large stylesheet
unless the application needs highly customized controls; palettes preserve more
of Qt's standard behavior.