A theme for the quisk SDR project that brings it from a 2000's era asp.net demo to a modern look & feel
  • Python 97.8%
  • Shell 2.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Chris ce2aab4d1f Add console theme: new layout, power/SWR gauges
Second theme that rearranges Quisk's own controls after it builds them:
hero bar with large frequency readout, status strip and an instrument
cluster (S-meter scale, power and SWR arc gauges from the HL2 widgets
file), a band ladder, receiver cards and a dock for views, memories,
recording and the radio's own widgets.

Themes are now named palettes in theme.py; GTK native widgets are styled
with CSS so sliders and text entry match. Layout checks run before any
control moves, so a failure leaves Quisk's stock layout intact. The
preview can load the real HL2 widgets file and fake transmit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 20:14:47 -07:00
bin Add console theme: new layout, power/SWR gauges 2026-09-24 20:14:47 -07:00
preview Add console theme: new layout, power/SWR gauges 2026-09-24 20:14:47 -07:00
quisk_ui Add console theme: new layout, power/SWR gauges 2026-09-24 20:14:47 -07:00
.gitignore Dark radio-panel theme for Quisk 2026-09-24 18:29:25 -07:00
quisk_conf.py Add console theme: new layout, power/SWR gauges 2026-09-24 20:14:47 -07:00
README.md Add console theme: new layout, power/SWR gauges 2026-09-24 20:14:47 -07:00

quisk-ui

Dark themes for Quisk, applied to Quisk's own wxPython UI at runtime. No Quisk files are modified, and settings are unchanged.

Theme Layout Look
panel Quisk's stock layout graphite, amber frequency, cyan spectrum
console new layout: hero bar, band ladder, receiver cards, dock charcoal, orange and teal, power/SWR gauges

Both themes share the restyled widgets: flat buttons with LED-strip toggles, a segmented S-meter, a filled spectrum trace and dark native sliders and text entry.

Choose the theme with _THEME in quisk_conf.py.

Console layout

  • Hero bar: power button, large frequency readout, a status strip (mode, bandwidth, band, RX/TX, split, UTC), then an instrument cluster: S-meter with scale, and power and SWR arc gauges.
  • Band ladder on the left, and receiver cards on the right: Mode, Filter, Receive, Transmit, Levels.
  • Dock: View, Memory, Favorites, Record, and a Radio row for the hardware's own widgets (Hermes-Lite 2: PS, ATU, LNA, temperature).

The controls are Quisk's own, moved into new panels, so commands, shortcuts, MIDI and remote control keep working. A control the layout doesn't recognize appears in the dock's More card instead of being dropped.

The power and SWR gauges read the Hermes-Lite 2 widgets file, using its power calibration. SWR is scaled by reflection coefficient, from 1:1 to 5:1 at full scale. Radios that don't report power get no gauges.

Install

ln -s ~/src/quisk-ui/quisk_conf.py ~/.quisk_conf.py
~/src/quisk-ui/bin/quisk-themed        # = GTK_THEME=Adwaita:dark uv run quisk, from ~

quisk-themed sets a dark GTK theme so the native controls (sliders, text entry, menus, config tabs) match. Plain uv run quisk still gets the theme, just with light native controls.

To uninstall, remove ~/.quisk_conf.py.

How it works

Quisk runs ~/.quisk_conf.py at startup, before it builds any widgets. The stub calls quisk_ui.install(), which:

  • sets every color_* value and the waterfall palette from quisk_ui/theme.py
  • reapplies them after the radio profile loads, so the profile's color scheme and empty typeface don't override the theme
  • replaces paint methods on Quisk's self-drawn classes (QuiskButtons, FrequencyDisplay, QuiskText1, GraphDisplay, Spacer) and softens the band plan strip
  • styles GTK's native widgets with CSS (quisk_ui/gtk_css.py)
  • for console: makes the graph narrower by the width of the side panels before Quisk builds it, then moves the controls into the new layout just before the window is shown (quisk_ui/layout_console.py)

To change colors, edit the theme's palette in quisk_ui/theme.py.

Preview without a radio

bin/quisk-preview                              # interactive window with fake signals
bin/quisk-preview shot.png                     # screenshot after ~6 s, then exit
QUISK_UI_THEME=console bin/quisk-preview       # pick the theme
QUISK_PREVIEW_TX=tx QUISK_UI_THEME=console bin/quisk-preview   # fake transmit (gauges)
QUISK_PREVIEW_HL2=1 QUISK_UI_THEME=console bin/quisk-preview  # with the real HL2 widgets file

The preview uses its own config (preview/preview_conf.py) and keeps all state in $QUISK_PREVIEW_DIR (default /tmp/quisk-ui-preview). It opens no sound devices, serial ports or network ports, and never touches ~/quisk_settings.json.

Limits

  • Tested against Quisk 4.2.51. The patches replace internal methods, so a Quisk upgrade can break them. If Quisk fails to start after an upgrade, remove ~/.quisk_conf.py and rerun it to see whether the theme is the cause.
  • While installed, the theme overrides the color scheme chosen in Quisk's config screen.
  • console assumes Quisk's "Large screen" button layout.
  • If you edit the band plan in Quisk's config dialog, the strip shows full-strength colors until the next restart.