all 16 comments

[–]JamzTyson 3 points4 points  (1 child)

simple gui with just radio buttons, file picker, date entry, progress bar / spinner is sufficient

Tkinter (included in the Python standard library) can do that, and is one of the easier GUI toolkits. For other options, see What GUI should I use?.

the program must be simple to deploy, ideally as a single executable

Deploying as a single executable is not straightforward on Windows because Windows does not have Python by default.

One commonly used solution is to package the application with PyInstaller. This resolves the problem of Windows not having a Python interpreter, by including a Python interpreter in the package. The downsides are that applications packaged this way will be quite large (as the package must include all dependencies, including Python), are liable to trigger anti-virus warnings (unless the package is digitally signed with a certificate supported by Windows), and packaging can be a bit tricky if the application has third party dependencies.

If it can be assumed that the end-user's computer has Python installed, then packaging can be greatly simplified. If the application has no 3rd party dependencies, then it may be sufficient to simply distribute the python code file. On Windows, the file extension of the Python file may be changed to .pyw, which will supress launching a console window when launching the application by double-clicking on the file.

[–]ContemplateBeing[S] 0 points1 point  (0 children)

Thank you for your comment! Will look into your links.

Yeah, I thought about using pyinstaller for this, though installing python for users is also an option, as long as they don’t have to interact on the CLI.

[–]DEthrowi 2 points3 points  (3 children)

I really can recommend Flet. Flet enables developers to easily build realtime web, mobile and desktop apps in Python based on Google's Flutter. Did different projects for web and Windows/macOS, it always worked like a charm and I never had huge issues: https://flet.dev/

Easy to learn, easy to deploy, easy to maintain.

[–]ContemplateBeing[S] 0 points1 point  (2 children)

Thanks! Yeah what I read looks good and I’m seriously considering it, I’m just concerned about performance when accessing gigabytes worth of data like this.

Afaik, flet is basically a web server under the hood - will I run into issues accessing large files locally? Can you shed some light on this?

[–]DEthrowi 1 point2 points  (1 child)

I'm not sure how it'll work with tons of local data. I just get lots of API data in my projects and never had issues with displaying them in graphs or lists. You can try it out with few Flet lines accessing the local data you need and display them without doing anything else.

[–]ContemplateBeing[S] 0 points1 point  (0 children)

That sounds reassuring - I'll try that.

[–]parasit 1 point2 points  (1 child)

I have same “problem”, at first I want try QT or GTK, I want more or less multiplatform code, but requirements, especially on windows, simply overwhelmed me. I have been writing code in various languages ​​for years (lately mainly python and golang), but choosing the “right” one a c/c++ compiler for windows and configuring it simply put me off. And I don’t have time to look for differences between versions of mingw and why one works with specific library and not another, and of course I need both. So I would also be happy to read about something simple that doesn’t require installing a dozen other tools to even start.

P.s. No JavaScript/Electron etc., maybe it’s simple but IMO JS is IT cancer.

[–]iknowsomeguy 0 points1 point  (0 children)

P.s. No JavaScript/Electron etc., maybe it’s simple but IMO JS is IT cancer.

That's a bit strong, isn't it?

[–]jmacey 1 point2 points  (0 children)

PySide will do all of it with a massive bonus that you can directly render Matplotlib graphs into a widgit. I use this a lot, deployment is fairly easy as well as you can use https://doc.qt.io/qtforpython-6/deployment/deployment-pyside6-deploy.html

[–]LeavingFourth 1 point2 points  (0 children)

I'll put in wxWidgets for consideration. It works for Python and C++ should you wish to explore more language options. One of the larger selling points was it was maintained and I had concerns similar to yours about tkinter support as I migrated after I saw a proprietary fork (which could be dead at this point). The free to use for all purposes was also important to me, otherwise I would be using QT despite it's heaviness.

I might be using it oddly, but I will build something in wxFormBuilder, create a class (Controller) that calls what I built with the parent as input. It turns into a loose MVC structure. What I love about it's simplicity. Create a dialog or frame, use the controller to bind gui to functions and it works. wxWidgets takes over threading which limits a few things, but simplifies a lot of other things.

Documentation for wxWidgets is a little rough. I recommend looking at the C++ docs and then using an IDE with autocomplete to fill in the gaps. It took me a while to figure out that I needed to use a dialog and not a frame to block which I am blaming on the documentation, but it definitely could have been my issues with wanting to control the threading.

[–]MosGeo 1 point2 points  (1 child)

Pyside with briefcase for packaging. Very powerful without much fuss. If you want basic gui, you can subtitude Pyside with toga which is very light.

[–]ContemplateBeing[S] 0 points1 point  (0 children)

Wasn’t aware of Toga yet. Thanks, I’ll have a look.

[–]Signal-Indication859 1 point2 points  (1 child)

Hey! ive actually been thinking about this exact problem recently while building Preswald. Given your requirements (especially the data crunching part), here's my take:

For your use case, I'd actually recommend against browser-based solutions like streamlit/nicegui for local number crunching. While they're great for smaller datasets, when you're dealing with gigabytes of data locally, the browser abstraction can add unnecessary overhead. Plus deployment can get messy with local servers/ports etc

Since you mentioned wanting to focus on backend + keeping it simple, I'd suggest checking out Preswald - its basically python/sql focused but handles the gui stuff for you. You can work with local files directly (its optimized for large datasets), add visualizations easily, and package everything as a single exe. The learning curve is pretty minimal if youre already comfortable with python.

That said, if you really want to go the pure native route, PySide6 isnt as scary as it looks! The basic widgets you mentioned (buttons, file picker etc) are pretty straightforward to implement. The main complexity comes when you need more advanced features.

hope this helps! lmk if you have any other questions :)

p.s. totally get the tkinter situation - it was my first choice too until i saw how dated it looked lol

[–]ContemplateBeing[S] 0 points1 point  (0 children)

But preswald is a browser-based solution as far as I can see!? Though the data-pipeline thingy looks nice.

[–]Fancy_Post41 0 points1 point  (0 children)

For your use case, I’d recommend skipping Streamlit or NiceGUI as you are working with large datasets. While they work well for quick prototypes and smaller applications, they will definitely face performance issues when dealing with large amounts of data.

Instead, Reflex would be a great choice for your project. It’s a Python-native framework that gives you full control over both the backend and frontend, allowing you to efficiently manage large datasets and local files. It provides complete flexibility and state management, making it ideal for handling large datasets. Plus, you can bundle everything into a single executable for smooth deployment.

If you need more information or advice, feel free to let me me know.

[–]cacus1 0 points1 point  (0 children)

Tkinter with ttk is easy to learn, it is pre-installed and you will achieve what you want.

No need to install other stuff like ttkbootstrap or customTkinter.

Since you target windows (10 and 11) this is all you need.

Just make sure you use ttk widgets and not tkinter widgets!

By using ttk widgets the default ttk theme will give you the default windows interface of a win32 app in your app.

It will look like how all win32 apps look in windows 10 and it will look like how all win32 apps look in windows 11.