19 ms·
PysimpleGUI
- mkesper 3y agoDoes anyone have experience with this? The goal to lower the entry bar for GUI development seems laudable to me, wonder where the solution stops to work, though.
- dilawar 3y agoNot to answer your question but it brings back some nice memories. I was in college when author started this project. He worked a lot on it. After a few years, he stopped and archived the project. Looks like it's back again. Nice! I used it in all my college demo and small projects and I loved it. The most complex GUI that I made was a oscilloscope frontend for lab-made signal recorder. It is indeed a simplegui library.
- thastings 3y agoThis is an awesome library. I've used it for multiple, mostly internal tools. The more complex one were a tool for cardiac action potential analysis and another for the evaluation of multiple choice tests. Complexity exploded over time, but that hinged on my coding skills, or lack thereof... PySimpleGUI did enable me to make GUI tools without getting my hands dirty outside my Python world, so kudos for that. Protip: the 'Reddit' theme looks way more modern compared to the other ones. Use that to get away from the 90s looks.
- daedrdev 3y agoIt works quite well for small and medium sized programs, far better than I expected. The looping system is quite easy to use, and there is even a nice system for calling long functions without blocking the GUI. You can even use pyinstaller to make a fake application using it. I’d say it stops working so well if you want a ”modern” looking GUI, as the GUI looks pretty old. Also, the documentation is really good imo.
- RaftPeople 3y agoYes it works, and my needs for GUI's are relatively simple so I haven't hit limits+issues. "Relatively simple"=Business app stuff like CRUD and also personal project+task mgmt tools. Before I landed on this one I spent significant time testing/prototyping PyQt and TkInter. Those tools required more effort than I was looking for (based on expectations from past environments and tools for business app dev). PySimpleGUI is quicker and easier than the other tools and is powerful enough for my needs.
- lionkor 3y agoI have one comment, and I hope it's not rude: There is too much text. Everywhere where you can put text, the author put a lot of it. Sentence after sentence, rambling on. Coherently so, most of the time, sure, but just one after the other and not a single relevant screenshot for the first thousand words. Something is not right here. Either this is a joung enthusiastic coder, which is probably the case, or there is so much text in order to convince you to try it. The readme even has an about me section where the author introduces himself. For some examples, scroll to random points in the readme and read a few paragraphs, then repeat what you just read.
- dilawar 3y agoLol. He is definitely not young as in inexperienced coder. He will definitely not going to win awards for barely sufficient documentation and docs organisation. Dude got a personality. I've followed the project when I was in college and used it in my personal project.
- baz00 3y agoI just scanned it. It's not an MVP for some product they want to attract investors. It's a tool. Which has documentation written by someone who wrote it. I hope this one is not rude too: are you sure you're just not afraid of having to read stuff rather than being spoon fed bullet points and steps?
- lionkor 3y agoGive me a wordcount on that readme, you'll see what I mean. If it was 1/3rd the length it'd still be one of the longest readmes ive ever read - and almsot all the ones ive read and written are by humans.
- ptx 3y agoI think the problem with the README is that it sounds more like a marketing brochure than documentation. It's full of slogans and weird illustrations comparing it to "Other Python GUIs".
- jbstack 3y ago
- phyalow 3y agoIn 2023 isnt it almost always better to make a webapp through dash or something if you need a “gui”?
- bufio 3y agoNo.
- baz00 3y agoWhen the only tool you have is a hammer, everything is a nail. It depends on your requirements. I still produce actual native GUIs for tools I write. They're faster, require less futzing to service, generally continue working for years if not decades, have far richer control possibilities out of the box and tend not to rely on 5000 layers of excrement slapped on top of each other. Oh and no fucking Javascript!
- Xeamek 3y ago...but why?
- notyoutube 3y agoI've got one very convincing reason: distribution. Having a web app makes it: * usable on pretty much any platform * easy to distribute/update * easily trustworthy/jailed (no need to install something that might access your data) It makes me sad, but as far as I can see, there is no serious alternative for universal+jailed apps.
- halfcat 3y agoThis is not “very convincing” if it doesn’t meet your requirements. There are plenty of ways to distribute thick client apps that are usable from any client, easy to update, and which don’t have access to local resources, like Remote Desktop, VMware, Citrix, etc.
- notyoutube 3y ago> Remote Desktop, VMware, Citrix and ask your users to install those before being even able to use your app? I haven't phrased my argument very neatly, but the point stands: anyone with an iphone/android/linux/… can easily use a web app, now, without any prerequisites. You don't have to bundle it or distribute it differently than with a webserver and it's a single codebase. That's not the case for any other tech that I'm aware, and it's a shame.
- quietbritishjim 3y agoLooks good. I have a suggestion for it, although it might be this library is too mature for such a dramatic change: use dictionaries (which, as of a recent Python, remember which order the elements were inserted) instead of lists. I did something like that in an old job, except it was a much thinner wrapper around PyQt (and surprisingly little code). A key difference is that setting properties/signals and nesting widgets was done together. One benefit of that over setting properties in the constructor is that, if you need a name for a widget (e.g., to set the text later), you can still set the properties of it in the main bulk of the view. self.mytext = QTextEdit() view = { "title": "My Window Title", QVBoxLayout(): { self.mytext: { "text": "Initial text", }, QPushButton(): { "text": "copy from self.mytext", "clicked": self.copy_text, } } } setup_view(self, view) The "setup_view" function was the whole API. They talked about opening sourcing it as part of something else – I hope they do because I found it really handy for quickly knocking together simple GUIs. But this library looks like a good alternative, so thanks for posting.
- JimDabell 3y ago> use dictionaries (which, as of a recent Python, remember which order the elements were inserted) instead of lists. It feels that way to me too but that change was introduced in Python 3.7, which is over five years old now! https://docs.python.org/3/whatsnew/3.7.html#summary-release-highlights https://docs.python.org/3/whatsnew/3.7.html#summary-release-...
- ptek 3y agoRebolView ??
- Izkata 3y agoI was also wondering if there's some influence there, it looks very much like that but implemented as native python data structures.
- BoppreH 3y agoI'm really, really excited about these GUI frameworks. Native desktop experience is so much better than web-view amalgamations. And kudos to PySimpleGUI for the simplified event loop, and multi-backend approach, that is genuinely new. I do wonder why don't we see more "automatic" GUIs: given some data structures and functions, make a passable interface to interact with them. Use heuristics to pick when a panel should be vertically or horizontally laid out, or placed in a tabbed interface, or a popup, etc. It would unlock a lot of functionality that is too nested for CLI and too "native" for web apps.
- scrlk 3y agoThis might be of interest to you: > Gooey - Turn (almost) any Python 3 Console Program into a GUI application with one line https://github.com/chriskiehl/Gooey https://github.com/chriskiehl/Gooey
- BoppreH 3y agoThanks, that's exactly the right direction. But not yet the right magnitude. You're still limited to what's representable as single CLI invocations.
- abecedarius 3y ago> "automatic" GUIs There was something answering that description a couple decades ago, called Naked Objects. Never tried it because I wasn't into Java, but it sounded useful.
- kspacewalk2 3y agoTraitsUI was/is a good "automatic UI" for python.
- destructionator 3y agoI've played with this a bit over the years, starting with my automatic form generator for the web back in 2011 based on function arguments (coupled with an automatic data to html thing to see the function output), and more recently some similar stuff for my gui toolkit too (using the D programming language). For example, you can write: ``` import arsd.minigui; void main() { // need to define the data you want in a struct, // it requires a struct even if you only want one item struct Data { string code; } // then do the dialog function with the struct and it // auto-creates a dialog for all the parts of the struct // and calls the function you provide when the user hits OK dialog((Data received) { // you got the number here messageBox("You gave me " ~ received.code); }); // need to run the event loop explicitly so main doesn't return // early and end your program; this will return when all windows are closed EventLoop.get.run(); } ``` You can also attach some user defined attributes to tell it which widget you want to control the thing (defaults are line input for string and int, drop-down select for enum, groups for structs... that's about all i bothered to implement so far, tbh my gui toolkit is more of a side project toy than a main event so the time i put in is limited), for example using `@ControlledBy!VerticalSlider(0, 100)` on an `int` to make it a slider from 0 to 100 instead of a text box asking for a number. My menu thing uses this too, you can attach functions to menus and it can pop up a dialog. For example you might do `@menu("Search") Find(string text) { ... }` and let it auto-generate the menu and dialog box for it. I also have a `DataControllerWidget` which does the callback on any change event, allowing for real-time manipulation. I wrote a little blog post about this a couple years ago (seriously, i move sooooo slowly on this stuff!) http://dpldocs.info/this-week-in-d/Blog.Posted_2020_11_02.html#what-adam-is-working-on http://dpldocs.info/this-week-in-d/Blog.Posted_2020_11_02.ht... I'd love to spend more time on this, I think it is really cool, but tbh I haven't gone too far beyond the basics and since day job has no use for such stuff it gotta be squeezed into when i feel like doing code on the weekend.
- hiAndrewQuinn 3y agoI'm considering taking a tool I have which has a pretty nicely fleshed-out CLI interface and wrapping a GUI around it, so people who don't run desktop Linux can use it too. This seems like it might be perfect for my needs. https://github.com/hiAndrewQuinn/finstem https://github.com/hiAndrewQuinn/finstem Mostly I'm wondering whether anyone else has ever done what I'm trying to do here. My tool has well defined CSV, TSV and JSON flags -- has anyone else ever tried to use an actual full CLI tool unchanged to build a GUI around? What challenges should I be ready to face?
- speps 3y agoLook at Handbrake, which is a glorified UI for ffmpeg for example.
- ElongatedMusket 3y agoI use both handbrake GUI and yt-dlp GUI. Here's something they both do horribly and I would suggest for any CLI tool with a GUI wrapper: have a persistent textarea at the bottom of the GUI that shows the equivalent CLI call to the settings I select in real time. This will teach the user how your tool works and also give GUI-only users a taste of the power they could have if they used the command line. So basically, treat the GUI as a stepping stone to helping the user build scripts/workflows around your CLI. That way you are only developing the CLI, and the GUI is just a helper app. The second you start adding features to the GUI that can't be done in the CLI, you are now maintaining two separate apps.
- speps 3y agoA hybrid would be great indeed, Bret Victor style with interactive widgets for each CLI argument. Might be a fun side project one day.
- hiAndrewQuinn 3y agoThis is a really good idea, and I can't believe it didn't occur to me with my PowerShell tooling background, since a lot of them have been doing this for a long time.
- scrlk 3y agoI'm surprised that nothing has filled the void that VB6 left behind in the rapid application development space. The language wasn't great, but VB6's strength was the drag and drop GUI builder.
- T-A 3y agohttps://www.lazarus-ide.org/ https://www.lazarus-ide.org/
- speps 3y agoSame paradigm with UI stored in manually editable files https://qb64.com/inform.html https://qb64.com/inform.html
- physicsguy 3y agoIt’s easier to spin up something as a local web server these days for the majority
- squarefoot 3y agoAs another user suggested, Lazarus is worth of consideration, although for a more VB-like experience, Gambas might be interesting too. https://www.lazarus-ide.org/ https://www.lazarus-ide.org/ https://gambas.sourceforge.net/en/main.html https://gambas.sourceforge.net/en/main.html
- StevePerkins 3y agoVB6's strength was that Windows was a virtual monopoly at the time. Today you have more fragmentation, where the user masses are still mostly on Windows but the developers are mostly on Macs or Linux. Developing a desktop GUI framework for a single platform is relatively easy. Developing a cross-platform GUI framework for three or more platforms is extremely hard. And a lot of people would STILL ignore it if it's not "mobile first", targeting iOS and Android too (meaning that it's probably dogshit for desktop apps).
- tredre3 3y ago> but the developers are mostly on Macs or Linux. Is that really true outside of web devs?
- amelius 3y agoWouldn't a HTML-like (DOM) interface be even more simple?
- halfcat 3y agoTextual[0] does this for CLI apps. That’s not for full GUI apps, but it’s very DOM-like, uses CSS selectors, etc. and a cool option when it meets your needs. [0] https://github.com/Textualize/textual https://github.com/Textualize/textual
- zaptheimpaler 3y agoVisual Basic is that you??
- bmitc 3y agoWhat is the recommended modern way to write GUIs in Python? Assume I'm in Python 3.12 and have a Poetry project as my management solution and that I have general software and GUI experience. What do I use? My application might have lots of streaming data to be plotted, streaming images to be displayed, lots of buttons and other elements. Is it PyQt6 with PyQtGraph? I don't want it to look like a Python app.
- JodieBenitez 3y agoI have used PySide6: https://pypi.org/project/PySide6/ https://pypi.org/project/PySide6/ Looks fine, works fine, API matches the C++ docs... slightly unpythonic at times but at least it's well documented.
- bmitc 3y agoWhat is the sales pitch over PyQt? What's the difference? It seems it's more just direct bindings to Qt?
- notpushkin 3y agoThey seem to be largely compatible in terms of the API, so the main difference is the license I think (PySide is LGPL, while PyQt is GPL).
- loloquwowndueo 3y agoWhat does “a Python app” even look like?
- bmitc 3y agoI wouldn't want it to be clear it was made with Python with some vey Python-y library that makes things look a certain way. I want the app to look modern in a way that it could have been written in C# for all the user knows.
- 3y ago
- akasakahakada 3y agoWhy can't we design a GUI using GUI in 2023? I need to see which is which on the screen man!
- notpushkin 3y agoThis is called RAD, yeah. There's Qt Designer for Qt and Glade for GTK, for example. (I still miss Delphi 6 though)
- simonbarker87 3y agoWhat's the solution for shipping a desktop Python app these days? I use Python a lot for small internal tools and always land up having to ship it as part of a web service and build a web UI for it so staff can use it as "set up conda, install the deps and run python ... " doesn't fly
- noncovalence 3y agoThere's a few projects that can package a python environment into a single executable (the main tradeoff is you end up including a copy of python with every single executable if you have lots of tools) - when I wanted it to create an installer (.msi/.dmg), I've found cx_Freeze came the closest to "it just works".
- longqzh 3y agoPyinstaller just works.
- quietbritishjim 3y agoIt secretly extracts its internal Python files to a temp directory and runs them from there, which can look a bit virus-ish and can potentially leave them lying around forever if the application doesn't exit cleanly.
- quietbritishjim 3y agoI find Nuitka worked a lot better than the alternatives. It genuinely compiles the Python to an executable, rather the all the other alternatives (like pyinstaller) which actually have the Python files hidden inside of them. It doesn't give any particular speed advantage (despite that being the original point) but works very well for packaging. I would suggest using the "standalone" mode of Nuitka. As the name suggests, it is self contained, but it's a lot of files per program because all the C extension modules are separate files. It's tempting to use "onefile" model instead because it really is over for so seems neater, but this is really just a self extracting program with the same files hidden inside as standalone, so has a few issues like the other packagers (e.g. can trigger virus warnings or leave files lying around in temp directory).
- KolmogorovComp 3y agoThe examples look straight up taken from the 90s esthetically [0]. Don’t get me wrong, for prototyping/internal tools that need a GUI to be usable by people not tech savvy enough to use a CLI it’s perfect, but what about the cases where you want things to look good? While native UI are always best for performance etc, I’ve always found them harder to style than a webpage. What is the equivalent of components (listed of styled components that go together) in python GUI? Something like for Flutter or SwiftUI, that look slick without much effort. [0] https://raw.githubusercontent.com/PySimpleGUI/PySimpleGUI/master/images/for_readme/OpenCV.jpg https://raw.githubusercontent.com/PySimpleGUI/PySimpleGUI/ma...
- _dain_ 3y agowhat's wrong with the 90s look? many people like it. I hate the new generation of UIs: acres of whitespace, buttons that don't look like buttons, disappearing scrollbars, hamburgor menus.
- wredue 3y ago>acres of white space I recently tried overwatch and I seriously cannot find a single damned thing in that UI. Unlabelled buttons. Shit in completely random places. Extra buttons where not needed just to insert ridiculous white space. Components that don’t have functionality you expect, which is only granted by happening in to the similar component from a different pathway. What an utterly idiotic UI. If you are a manager at blizzard, please fire these bone heads that did this.
- analog31 3y agoI'm sure it's a matter of either doing it well or poorly, but in my experience, "styled" UI's are one of the reasons why software is so bad for most software and most users. At least the default UI style provided by the OS is something people can learn and transfer from one app to another. And since I'm not a gifted UI designer, it's probably better than anything I can come up with. It also adds to the already crippling cost of software development. The words you dread to hear from marketing: "Our software looks old."
- 3y ago
- Othympas 3y ago[flagged]
- simulo 3y agoSince some comments point out that the design looks old: I agree. However, the framework’s author describes the usecase as building simple UIs for what otherwise would be used via the command line or for building UIs for cases when people can't or don’t want to learn a more complex framework (this could include HTML/CSS/JS, which is quite complex, if you do not know it yet!).
- siddheshgunjal 3y agoI kinda prefer CustomTKinter, which has a much elegant and material theme-like look. Supports light/dark theme as per system on windows/Linux/MacOS.
- marsven_422 3y ago[dead]
- lithiumii 3y agoI once made a simple serial monitor GUI with this. It's really easy to use, and has better defaults than vanilla tkinter. However, as soon as I discovered VS Code's serial monitor plugin I abandoned my project.
- 29athrowaway 3y agoPyGTK is not hard to use. ChatGPT can help you generate an app.
- _dmn7 3y agoGood luck packaging that on Windows though. PyQt generally works better if you need cross-platform support.
- 29athrowaway 3y agoI stopped caring about Windows long ago. If my software doesn't build on Windows, it's probably by design.
- gabrielsroka 3y agoI wrote a very simple Python gui tool and posted it a few months ago: https://news.ycombinator.com/item?id=37111269 https://news.ycombinator.com/item?id=37111269
- mikewarot 3y agoWell, it's starting to get close to the ease of use of VB6 or Delphi/Lazarus. Progress is definitely being made, now they just need an interactive GUI builder, so you can just #import the forms you make, the Bob's your Uncle. --- I lost a boatload of time on a project trying to get WxPython and WxFormBuilder to work together years back... any little change in the forms broke everything in the backend. I finally wrote a little shim that mated everything up, until I had to change a fields Type, and it broke everything. It appears that won't be the case here. (Thank goodness!)
- MaxBarraclough 3y ago> Supported frameworks include tkinter, Qt, WxPython, or Remi. The term "wrapper" is sometimes used for these kinds of packages. Other than the support for web UIs, this seems like Java AWT but for Python. It presumably has the 'lowest common denominator' problem of supporting only those widgets which are available in all the wrapped GUI toolkits. For desktop UI work, why not just use Qt's official Python bindings? Qt has good cross-platform support, and its Python API seems very approachable. https://doc.qt.io/qtforpython-6/quickstart.html#create-a-simple-qt-widgets-application https://doc.qt.io/qtforpython-6/quickstart.html#create-a-sim...
- dang 3y agoRelated: Python GUIs for Humans – Transforms UI into People-Friendly Pythonic Interfaces - https://news.ycombinator.com/item?id=28600922 https://news.ycombinator.com/item?id=28600922 - Sept 2021 (43 comments)
- magicmicah85 3y agoWe had a work requirement to start logging hours in Jira. I hated having the website open, it was slow to find the Jira I was working on, find the link for logging hours and adding a comment. I wanted a desktop app that had a list of issues assigned to me with buttons to add comments and work log hours. I messed with Tkinter but was struggling for awhile just getting it to look…nice. I stumbled on PySimpleGUI and suddenly I was flying. Setup the hooks to the Jira api and I had what I wanted. Was a great project to learn UI development.
- KeplerBoy 3y agoIs it learning UI development though? Does any of this translate or scale to more demanding projects?
- mkoubaa 3y ago30% of all software engineering is scaling things that werent designed for scale
- magicmicah85 3y agoBefore you learn React, you should learn html and JavaScript and before you learn those, you should know how to read. Every skill builds on the next. For me, having a positive experience with this led to more positive experiences with MAUI and GTK. I’m not writing out the most scaled out projects - I’m just having fun learning.
- seusscat 3y agoDo you have the sources for this application available somewhere? I was considering writing something similar just this week. So an already available application where I just point it to the right instance would be amazing
- magicmicah85 3y agoI’ll see if I can publish it. It’s not proprietary but I just have to get the blessings first.
- nickcw 3y agoFrom https://github.com/PySimpleGUI/PySimpleGUI/issues/142 https://github.com/PySimpleGUI/PySimpleGUI/issues/142 > 2023 is going to be the "Make or Break" year. I ultimately need to determine if the project is going to continue. To date, it's nowhere near sustainable. The income doesn't cover the cost of the project, meaning that it's not only unable to allow me to pay for my cost of living, but I continue to rack up debt, borrowing money, to keep the project functional. > This isn't new information if you've followed the over 1,200 announcements I've made since Sept 2018. The data is available should you wish to look at the GitHub Sponsorships and do the simple math required to calculate income from Udemy. It would be great for the project to keep going. I'm hopeful, but more than hope's required to keep the project going. So if you like this project and want to see it around in the future, please support it. Github sponsors is probably the best place: https://github.com/sponsors/PySimpleGUI https://github.com/sponsors/PySimpleGUI
- deleted 3y ago[deleted]
- flatline 3y agoI worked with a non-software team that used this to build a UI about two years ago. It’s great to spin up something quickly, and worked well for a team that didn’t have much UI experience - to a point. It becomes very hard to maintain and navigate as soon as any complexity comes in - much harder than Qt, Winforms, or Swing. The styling was lackluster. Maybe it’s improved in that time, but I think its place is quick one-off UIs and rapid prototyping.
- deafpolygon 3y agoI love this project. Enough said, we need more of this approach to software development. Software dev is about helping people solve problems.
- sourcecodeplz 3y agoI like this part: >> Want to share your PySimpleGUI program with friends and family that don't have Python installed on their computer? Try the GUI front-end for PyInstaller that you'll find in the psgcompiler project.
- kushie 3y agoi haven't used this pyinstaller gui, but for my purposes (internal python 3.8) i just set up a batch script for each project to have a single command to make my executable. i've also had to do some wrestling with pyinstaller for specific features, not sure how much the pyinstaller gui helps iron those issues out.
- hanniabu 3y agoI really wish this had a more modern default style
- _dmn7 3y agoAs a developer for a Python GUI application [1], I think the biggest problem with using Python for desktop applications is the packaging. All existing tooling for creating a distributable binary either stops working or starts to require nontrivial hacks once you have more than a few dependencies. Even popular packages have issues. You get cryptic missing hidden import problems and missing data files that you didn't know were ever needed. Some dynamic module loading also stops working once they are brought outside of the normal python environment, which is the case if you use PyInstaller or cx_freeze. I'm not sure what can really be done here. Maybe Python needs to propose a standardized way to package standalone programs like Java's jars that only depends on the interpreter. 1. https://github.com/FreeLanguageTools/vocabsieve https://github.com/FreeLanguageTools/vocabsieve
- networked 3y agoPython has zipapps (https://peps.python.org/pep-0441/ https://peps.python.org/pep-0441/), which are standardized and similar to JARs. You can build a zipapp that includes your application's dependencies using a tool like shiv or PEX, only with binary extensions the artifacts are still per-platform: https://github.com/linkedin/shiv#gotchas https://github.com/linkedin/shiv#gotchas. I recommend users to install my Python programs with pipx (https://github.com/pypa/pipx https://github.com/pypa/pipx). I think it is the best option when the audience is at all technical. pipx makes such a big difference for managing Python applications. It avoids the version conflicts of `pip install --user` and the pain of manually creating per-application venvs. In general, it provides a reasonable user experience. Because of this user-friendliness, I can recommend pipx as the primary installation method and expect people to succeed at installing the program with it. (I don't see issues about pipx installation in the trackers of projects that recommend it.) My programs have binary dependencies but no GUI.
- raffraffraff 3y agoPipx still breaks. I tried to use something a few days ago that had been working until a month ago and it failed with some useless generic python error that I can't remember. I looked at the code in the /usr/bin/thing and it was just a wrapper. After following the rabbit around I just uninstall pipx, install it again, and then reinstall the thing that I was originally trying to use. No idea what broke it, perhaps a python update or something. The 'dead' version is probably still hanging around in my home directory taking up space somewhere. Python absolutely sucks in this regard and I don't think there is a permanent solution. Except give python a compiler that can spit out binaries and libraries. I wish nim was 100% python code compatible. Compiled binaries with shared libs work fine as long as they come from an OS package repository. Statically compiled binaries work almost everywhere. But a script that needs a bag of other specifically versioned scripts needs to live in it's own (sometimes impossible) world. Hell, I've even had a single pip install on a clean system fail because two dependencies of the module I was installing wanted different versions of some common dependency. Gah, burn it with fire. I'm always amazed at the Windows ecosystem. I can download something that was built in the 90s and happily run it in wine.
- hk-senokr 3y ago[flagged]
- bitwize 3y agoThis looks cool and seems about on par with Tcl/Tk w.r.t. rapid GUI prototyping.