Lately I'm all in on LÖVE (https://love2d.org). No dynamic linking required, cross-platform, less bloat than mainstream toolkits. Anything it can't do I just accept as a constraint I can't change.
Game engines (at least the lightweight ones) seem good for cross-platform graphical apps in general but the idea of redrawing a static GUI at 30 FPS just sounds too inefficient to me.
We're all up this tree where we want all the features we're used to and we're willing to put up with software bloat and insecure software and sprawling supply chains to get it. I'm not. So I start with something minimalist and do what I can within it.
All I meant is, if drawing too many things overloads the system so it can't render at 30fps, that's fine, I build things that don't look bad if the rate drops. I can't do action games, high-speed video, a few other things. That's fine, I can still do lots of things.
I believe game engines usually draw to a texture then display the texture, reusing it on subsequent frames, but if they don't, that wouldn't surprise me. UIs don't take long to draw, so drawing at 60fps is often quite cheap.