For Deploying to Linux and Windows, I use PyInstaller. Note: you may find another similar one with same name but, lowercase: pyinstaller. It is NOT the same as PyInstaller.
I made an App (in Formbuilder) to build the App. Still, need to use PyInstaller on the platform you’re designing for. You can PIP install it into those platforms.
Oh boy – those are new ones I have not looked at yet
Avalonia looks very clean and modern and is mit. Not sure what the implications are for .net.
I can’t be the only one looking for a basic gui that can:
deploy to linux/win/mac
free with permissive license for binary release without source (no qt)
a clean look (unlike tkinter and such that look 1990s-vintage)
c/c++/python apis
a not-too-steep learning curve
responsive would be nice
I use vscode on both linux and win for cortex-m coding and love it, but could not get it running with wxwidgets – so I tried code:blocks/mingw64 (testing on win currently), which works but I miss the intellisense features (hover lookup…) and dark mode, but I can live with it.
Avalonia talks about visual-studio, which I presume is a paid offering – does it work with open-source vscode? Can it work with a regular g++/gcc compiler instead of .net (which I am guessing is also a paid tool)?
When I say plotting, what I am really needing is an efficient canvas line-segment draw. In my pysimplegui app I was able to receive four channels of 24b adc data (about 150kbaud average) over usb, plot time-domain to a canvas in realtime, and calculate/plot fft data to another canvas (just with 1-second updates). I was quite pleased to get enough number-crunching happening in parallel with the gui. I want to experiment with a similar application using a serial port stream and a new gui. I am just a hardware/embedded guy getting in over my head on desktop applications, but I do my best to hack my want through.
The mods will likely close this as off-topic, which is kinda a shame when some of these discussions go off in interesting directions, so thanks all for the pointers.
Hello, not sure why are you doing graph in C++ (maybe you want to make a proprietary product ?), for real-time graph I recommend to use PyQtGraph lib. and you can package it with py2exe or similar tools to make a product.
For real-time graph, it is recommended to use event loop to handle data stream – it is too fast for event loop. Event loop is designed to handle UI relevant operations. Normally you should use a separate thread to handle data and update graph via some canvas context or OpenGL context regularly.
I have not tried packaging with py2exe or Pyinstaller mentioned by @blackcoffee but it does sound useful to be able to create an executable from a python project.
In the pysimplegui project I did, I was using a daemon_thread to receive/save/process data from a usb-hid connection to my custom daq device. In the gui thread I was able to grab frames of data to update the display – the scope display was realtime while the fft was simply updated every second (on a 1-sec window). It was my first venture into desktop software and I learned a lot and was pretty happy with it (as hackey as it was).
Now I want to do something similar to learn a bit more c++ (but with a serial port stream this time instead of usb) and thought to try wxwidgets so it would work across linux/win/mac. I got a basic app running using wxformdesigner, code:blocks, and mingw64. However, as I dig in deeper to wxwidgets, I am concerned that I may not be able replicate the same sort of threading since wxwidgets seems to hide and take control of the event loop. I could be missing something, but I have not spent too much time on this yet.
Now, @marekr has got me looking into .net and c#, which I had thought were proprietary/paid but seem to now be open and cross-platform. So I am going to experiment a bit there next to see what I can figure out.
Hah, yes you got me off on a new tangent! From my little bit of research the last hour or so I have loaded dotnet6 on my linux box and am now going to put it on my win machine, then I will grab c# and see what I can learn. If all goes well I will dig into the avalonia lib. MIT or similar everywhere so what’s not to like? I wanted to get deeper into c++ (I have four decades of embedded C but not much c++) for oop but c# will also be good to learn.
thanks @marekr
…and just to point out that this is not totally off-topic, since the hardware I connect is all designed in kicad
for GUI, it is almost recommended to do GUI related ops in the main thread. you can put command or events into a thread-safe queue, and your main thread (GUI) can handle them correctly.
Well, yeah, java can be verbose and bloated, but it does keep you from making silly mistakes. I wrote some for frc robotics a few years back. But I am now working through some c# tutorials, and will keep an open mind for the language. I do want to run on linux as well as win – what difficulties did you find on linux?
dotnet is open source and cross-platform. It is the work of Microsoft rewriting dotnet framework over the last few years and is supported and used by major companies. It can even compile for embedded platforms. The dotnet coreclr engine is also embeddable in any application by design.
mono was acquired by microsoft after buying out Xamarin 7 years ago and unofficially end of life, receiving no updates since 2021.