Recently I’ve been working on writing a GUI for my SURF project. I’m using Tkinter, the standard GUI for Python. I didn’t program before coming to Caltech, so I took CS 1, the intro programming course, during first term. During the course, we covered a little bit of Tkinter; mainly drawing things on the canvas, like making a bunch of bouncing balls bounce off the edges of the canvas. Making a GUI for user input uses different "widgets" than drawing moving objects, but there’s plenty of documentation and examples online that are very helpful. Additionally, the module tkFileDialog comes with standard functions to create the Open and Save dialogs. It did take me some time to realize, though, that I had accidentally made several widgets children of the wrong frame, so they wouldn’t format correctly.
Currently, my GUI looks like this:
It will most likely look different by the time I’m done, though, since I’m planning on adding some more features. There’s currently three main input methods: Knotilus, Plink/SnapPy, and Seifert data. Knotilus is a database of links, while Plink/SnapPy is an open source python program that allows a user to draw a link by using mouse clicks. The program interprets the input and outputs an associated quadratic form as a square matrix. When combined with the other SURF student’s code (he’s working on the same project), it will output the Heegaard Floer correction terms, an invariant for 3-manifolds. An invariant is a charactersitic that tells things apart, like species or microchip implants in animals. Different objects can have the same invariant value, though a single object, even after certain transformations, can only ever take one invariant value. For example, multiple animals can all be the same species, but a single animal, even after being relocated or growing, is still the same species. Invariants for 3-manifolds are used to tell different 3-manifolds apart from each other, which is especially useful in topology. Heegaard Floer homology, which includes the correction terms we’re computing, is all about invariants for certain types of 3-manifolds.