#PySide6
Also, the crashes magically stopped with PySide6 6.12.0, which would point towards it being a PySide bug? The changelog doesn't mention any fixes that really match my problem, but there were a few other crash fixes, so maybe it got fixed "by accident" along the way?
November 8, 2026 at 2:23 AM
Museの無料枠数%で喋るデスクトップマスコットが割と一瞬で出来ましたw
Python + PySide6で透過ウィンドウ化
Ollama経由でqwen3.5:9bをロードしてチャット可能
Irodori TTS3で喋ります
web検索やファイル操作もできるように進めてもらってる
November 6, 2026 at 9:12 PM
Making a file converter feel alive with QML
Part 2 was about DotMorph's conversion engine. This one is about the part people actually see: a two-ring radial menu that blooms around a file, written in QML and driven from Python with PySide6. ## Why QML and not widgets A radial menu is all curves, glows and motion. In QWidgets that means hand-painting every frame with `QPainter` and running your own animation timers. In QML, an animation is a property with a `Behavior`, and the scene graph draws everything on the GPU. The Python side (a `Bridge` QObject) exposes the file, the targets, progress and status, and QML just reacts. ## Drawing a ring sector My first attempt drew triangles instead of ring sectors, and the labels on top were invisible because of a colour-mixing bug. The version that works describes each sector as an **SVG path** : the outer arc clockwise, a line inward, the inner arc back. QtQuick.Shapes renders it with the curve renderer: // ring sector as an SVG path: outer arc clockwise, inner arc back function pt(r, deg) { var a = deg * Math.PI / 180 return (s.cx + r * Math.cos(a)).toFixed(2) + " " + (s.cy + r * Math.sin(a)).toFixed(2) } readonly property string d: { var bigO = sweepO > 180 ? 1 : 0, bigI = sweepI > 180 ? 1 : 0 return "M " + pt(oR, a0) + " A " + oR + " " + oR + " 0 " + bigO + " 1 " + pt(oR, a0 + sweepO) + " L " + pt(iR, b0) + " A " + iR + " " + iR + " 0 " + bigI + " 0 " + pt(iR, b0 - sweepI) + " Z" } ShapePath { strokeColor: s.mix(s.theme.sectorEdge, Qt.lighter(s.hot, 1.35), s.lift) fillGradient: RadialGradient { /* sector colour → category colour, by s.lift */ } PathSvg { path: shape.d } } The gaps between sectors are constant in _pixels_ , not degrees (`gapPx / radius` converted to an angle), so the inner and outer rings line up visually even though their circumferences differ. ## One number drives the hover Each sector has a single animated property, `lift`: 0 when idle, about 0.55 when its category is open, 1 when hovered. Colour, outward push and outer radius all read from it, so they can never get out of sync: property real lift: busy ? 0 : (hovered ? 1 : (selected ? 0.55 : 0)) Behavior on lift { NumberAnimation { duration: s.theme.ms(170); easing.type: Easing.OutCubic } } transform: Translate { x: Math.cos(s.midRad) * 7 * s.lift y: Math.sin(s.midRad) * 7 * s.lift } `theme.ms()` scales every duration, and returns 0 when _reduce motion_ is on. That makes the accessibility setting a single switch instead of a hunt through fifty animations. The intro uses the same trick: every sector has a `reveal` property that animates from 0 to 1 with a per-sector delay (`order * stagger`). Scale, rotation and opacity are all functions of it, which gives you a staggered fly-out with a small spin. Labels counter-rotate (`rotation: -s.rotation`) so the text stays upright while the sector spins in. ## The success burst When a conversion finishes, a check mark draws itself in the hub and particles fly out. That's QtQuick.Particles with an emitter that does nothing until asked: ParticleSystem { id: particles; running: wheel.theme.motion > 0 } Emitter { id: burst system: particles x: wheel.cx; y: wheel.cy; width: 1; height: 1 emitRate: 0 lifeSpan: 1100; lifeSpanVariation: 350 size: 14; sizeVariation: 8; endSize: 2 velocity: AngleDirection { angleVariation: 360; magnitude: 300; magnitudeVariation: 160 } acceleration: PointDirection { y: 240 } } `burst.burst(110)` on success, and the slight downward acceleration makes it fall like confetti instead of expanding like a balloon. Failure gets a cross and a short `SequentialAnimation` shake instead. ## 0.1 seconds, thanks to a daemon Starting Python, importing PySide6 and compiling the QML takes about a second. That's fine for an app and terrible for a right-click menu. So DotMorph keeps a daemon running (started by XDG autostart) with Qt and the wheel already loaded. The trick is that the client side imports **no Qt at all**. `dotmorph FILE` checks for the daemon's socket in `$XDG_RUNTIME_DIR` and sends one line of JSON: def request(message: dict, timeout: float = 2.0) -> dict | None: """Send one request; returns the reply, or None when no daemon answers.""" path = socket_path() if not path.exists(): return None try: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock: sock.settimeout(timeout) sock.connect(str(path)) sock.sendall((json.dumps(message) + "\n").encode()) with sock.makefile("r", encoding="utf-8") as reader: line = reader.readline() return json.loads(line) if line else None except (OSError, ValueError): return None If nobody answers, it falls back to opening its own window. The wheel appears in about 0.1 s. Two bugs from building this: * **The daemon didn't answer.** Its socket server was created before the Qt event loop existed, so connections were accepted into the void. * **Long socket paths.** Unix socket paths are limited to 108 bytes. An unusual `$XDG_RUNTIME_DIR` blew past that, so there's now a short private fallback path. ### The hotkey that made the wheel shake Super+Shift+M opens the wheel with whatever files you copied. When I tested it, holding the keys made the wheel _shake_. Key repeat fires about every 30 ms, each repeat sent a new "open", and each "open" restarted the bloom animation. The fix is a debounce in the daemon: repeat = now - self._last_summon < SUMMON_DEBOUNCE # 0.6 s self._last_summon = now if visible and (repeat or [p for p in paths if p.is_file()] == self._files): return False # already showing these files: leave the wheel alone ### A drag is not a click The wheel is a frameless window you can grab anywhere and move. Early on, releasing a drag over a sector _started a conversion_. Now a press that moves past a small threshold becomes a move, never a click, and the wheel turns see-through while you move it. ## The edge dock Drag the wheel against the left or right edge of the screen and it turns into a slim glowing tab. Hover it, click it, or drag files over it, and a **half wheel** slides out of the edge, like Android's edge panels. It folds back when the pointer leaves, after a conversion, or on Esc. The dock is a small state machine (`free → docked → peek`) in Python that resizes and moves the window. QML switches the wheel into `half` mode. Some details took more time than the feature itself: * **Mirroring.** On the right edge the half wheel is mirrored so the first category is still on top. The hidden half behind the screen edge must never react to clicks. * **Sliding.** Dragging the tab up and down moves it along the edge; pulling it away gives you the full wheel back. * **Memory.** The side and height are saved, and the daemon brings the tab back at login. * **Progress while folded.** A conversion that keeps running fills the tab from the bottom up. ## Wayland, honestly A menu that opens at a precise spot and stays above everything is exactly what Wayland doesn't let a normal client do. DotMorph runs the wheel through XWayland on Wayland sessions: if os.environ.get("XDG_SESSION_TYPE") == "wayland" and "QT_QPA_PLATFORM" not in os.environ: os.environ["QT_QPA_PLATFORM"] = "xcb" The cost: it opens centred, because Wayland doesn't expose the pointer position, and it's X11 under the hood. A native version using the layer-shell protocol (KDE and wlroots compositors) is on the roadmap. ## Right to left The settings window and the options panel are fully translated to Arabic. For layout, QML does most of the work: LayoutMirroring.enabled: theme.rtl LayoutMirroring.childrenInherit: true That mirrors anchors and layouts. Sliders and toggles needed manual flipping, and an Arabic font (Noto Kufi Arabic, or another Noto Arabic face) is picked automatically. Format names, commands and engine errors stay English on purpose. ## Testing a UI that moves The test suite loads the **real QML** offscreen and drives it like a user would: arrow keys and Enter to pick a format, a drag that must not convert, the options panel, the dock modes, hit-testing on both edges. A message handler collects QML warnings, and the tests fail if any show up. The GIFs in this post come from the same idea. A script opens the real wheel, presses the keys, grabs every frame with `QQuickWindow.grabWindow()`, and ffmpeg turns the frames into the GIF. One lesson from that: Qt's `offscreen` platform has no OpenGL, so the Shapes simply weren't drawn. Running under Xvfb with Mesa's software OpenGL fixed it. In part 4, the last one: shipping all of this to Linux users five different ways from one signed git tag, and what AppImageHub's test taught me about "works on my machine". * **GitHub:** kareem2099/DotMorph * **Project page:** dotsuite.dev/en/product/dotmorph
dev.to
November 7, 2026 at 8:37 PM
Plico porta su Linux un editor PDF completo con strumenti per modificare pagine, compilare moduli, riconoscere il testo con OCR e firmare documenti digitalmente. #Linux #Plico #PDF #OpenSource www.linuxeasy.org/plico-ledito...
Plico l’editor PDF nativo per Linux con OCR e firma digitale
Plico è un editor PDF nativo per Linux basato su Qt6 e PySide6, con OCR, firma digitale PAdES, redazione sicura e compressione
www.linuxeasy.org
October 28, 2026 at 12:23 PM
يسعدني الإعلان رسمياً عن إطلاق النسخة التجريبية الأولى من DetailsBench!

أداة مجانية ومفتوحة المصدر لأتمتة اختبارات أداء الأجهزة، تشمل المعالج وكرت الشاشة والتخزين والذكاء الاصطناعي واختبارات الضغط، مع دعم Windows وLinux على معماريتي x86 وARM

🔗 GitHub: github.com/detailstech9...
GitHub - detailstech93/DetailsBench: PC Benchmark Manager (PySide6): benchmark discovery, launching and results
PC Benchmark Manager (PySide6): benchmark discovery, launching and results - detailstech93/DetailsBench
github.com
October 23, 2026 at 9:41 AM
New release: a simple PySide6 GUI for SQLite CRUD. It's a minimal application to view a SQLite table, add rows, edit existing rows, and delete rows. It uses only PySide6 and the Python standard library.
https://itsevilduck.gumroad.com/l/hcucks
itsevilduck.gumroad.com
October 16, 2026 at 7:56 AM
added Qt integration for #GlasgowInterfaceExplorer via PySide6

the dialog below is just 125 lines of code (plus a .ui file from Qt Designer); it offers every basic function of memory-25q applet in a touchscreen-friendly format
October 15, 2026 at 10:44 AM
added Qt integration for #glasgowinterfaceexplorer via PySide6

the dialog below is just 125 lines of code (plus a .ui file from Qt Designer); it offers every basic function of `memory-25q` applet in a touchscreen-friendly format
October 15, 2026 at 10:43 AM
that is how major versions have always worked, yes

the example I have included should be fine, you might have to s/PySide6/PySide7/ but aside from that I expect no changes would be needed. if you were using Qt internals for example, then yes you would
October 15, 2026 at 12:59 PM
Re: freecad broken, pyside6
Bumped, wait for the mirrors to pick up.
forum.artixlinux.org
October 14, 2026 at 12:31 PM
Now i train my own vibecoded ai system (its the wikipedia article for computers that i use for the tests), It has also a new UI (fallback to tkinter if pyside6 is mising) #ai #training #vibecoding
October 13, 2026 at 9:53 PM
Introducing #PyConZA2026 speaker, Grant Hillebrand! 🐍

20 years in corporate IT, 20 teaching CS. Thirty years on, he rewrote his higraph modelling tool from scratch in Python and PySide6, and he’ll share what he learned 🎨

Grab your ticket: za.pycon.org/pages/ticke...

#Python
October 13, 2026 at 6:30 AM
Found a bug where my whole app froze the moment a sound finished playing.

Not my code. Qt 6.11's FFmpeg media backend can deadlock the GUI thread at end-of-media, and after a plain stop(). #PySide6
October 11, 2026 at 1:48 PM
This one!
If you're not on Windows it has some preliminary bullshit but the program itself lets you just paste links and download them without throwing a million options at you
github.com/dsymbol/yt-d...
GitHub - dsymbol/yt-dlp-gui: A cross-platform GUI wrapper for yt-dlp written in PySide6
A cross-platform GUI wrapper for yt-dlp written in PySide6 - dsymbol/yt-dlp-gui
github.com
October 10, 2026 at 2:32 AM
一応明日は次のことやろっかなー
1.けもフレ二次創作物一つどっかにすとーりーだす(気が変わらなければ)
2.pyside6-webusbの更新のための作業
3.x ambientのv0.3.0ベースでモバイル版でもPC版でも軽く動くように多国籍版で使えるようにする(firefoxや chromeで動く感じ)
メモみたいな感じやけどこれやれたらいいなーみたいな(?)
October 3, 2026 at 12:09 PM
olladesk
Client desktop per Ollama in stile ChatGPT (PySide6/Qt)
aur.archlinux.org
October 1, 2026 at 8:47 AM
universe
Gamepad-first game launcher: a Rust core, a PySide6 UI, games inside gamescope
aur.archlinux.org
September 28, 2026 at 8:44 AM
pyside6-webusb、tauri-webusb、fox-webusbの確認された脆弱性は既に修正済です。
AIの情報は少し古いってわかんだね(?)
September 27, 2026 at 11:17 PM