Python GUI Programming Cookbook: Use recipes to develop responsive and powerful GUIs using Tkinter - podcast episode cover

Python GUI Programming Cookbook: Use recipes to develop responsive and powerful GUIs using Tkinter

Jun 03, 202526 min
--:--
--:--
Download Metacast podcast app
Listen to this episode in Metacast mobile app
Don't just listen to podcasts. Learn from them with transcripts, summaries, and chapters for every episode. Skim, search, and bookmark insights. Learn more

Episode description

Focuses on Python GUI programming, particularly using the tkinter and wxPython libraries. It covers the fundamentals of building graphical interfaces, such as creating forms and widgets, managing their layout using techniques like the grid system and frames, and customizing their look and feel with elements like message boxes, titles, and icons. The text also explores advanced topics, including handling data and classes within the GUI context, integrating Matplotlib for charting, utilizing threads and networking for responsiveness and communication, connecting to and interacting with a MySQL database, implementing internationalization and testing strategies like unit testing and debugging, and even creating basic 3D GUIs using OpenGL libraries like PyOpenGL and PyGLet. Practical advice on best practices for avoiding complexity and writing maintainable code, such as using OOP and design patterns, is also provided.

You can listen and download our episodes for free on more than 10 different platforms:
https://linktr.ee/cyber_security_summary

Get the Book now from Amazon:
https://www.amazon.com/Python-GUI-Programming-Cookbook-responsive-ebook/dp/B01N7IOL6S?&linkCode=ll1&tag=cvthunderx-20&linkId=f98f5f1ea7c07ef225a96ddb16176029&language=en_US&ref_=as_li_ss_tl



Discover our free courses in tech and cybersecurity, Start learning today:
https://linktr.ee/cybercode_academy

Transcript

Speaker 1

Welcome to the deep dive. Today we're diving into a stack of source material all about building graphical user interfaces, you know, those clickable windows with buttons and textboxes using Python.

Speaker 2

And our main guide for this journey is the second edition of Python gy Programming Cookbook by Burkhard A. Meyer from back in twenty seventeen.

Speaker 1

Okay, let's unpack this. This book sounds like it's basically a collection of recipes, right, tackling everything from just like getting a window to show up, yeah, to making it interactive with buttons, text fields, organizing complex layouts, handling data.

Speaker 2

Dealing with slow operations without freezing your app. That's a big one.

Speaker 1

Oh yeah, connecting to databases, even thinking about different languages and testing. It seems pretty comprehensive.

Speaker 2

It really is. It aims for a practical, hands on feel. The author, Burkhard Meyer, has something like seventeen years in the software industry, especially with Python and databases. Okay, worked at various places. And there was a reviewer input too from Mohit who also knows Python and security. So it feels grounded in, you know, actually building stuff, right.

Speaker 1

So our mission here is to sift through all these recipes and concepts. We want to pull out the really essential techniques, the key ideas, so you can get a solid grasp of Python gui's without reading well every single line.

Speaker 2

Of code, basically giving you the highlights real.

Speaker 1

Exactly the informed shortcut. So where does one even begin? The book starts like any good cookbook with the absolute minimum, right, getting your first window on screen?

Speaker 2

Yeah, using pythons built in kinter library. People usually shorten it to just TK. Okay, and the starting code is surprisingly simple. You import kinter you create an instance of the main window class that's TK dot TK usually assign it to a variable, say win, and then the absolutely crucial bit win dot main loop.

Speaker 1

The main lo Okay, that sounds fundamental. It's like the heart of the whole thing totally.

Speaker 2

It's the event loop. It just sits there, kind of waiting for things to happen. Button clicks, keypresses, resizing, Oh.

Speaker 1

The events.

Speaker 2

Yeah, the main loop process these. Without it, your window might literally just flash up and disappear because the script finishes. The main loop keeps it alive and listening.

Speaker 1

Got it. So it's not just displaying, it's running the interactive part. And the book mentions a quick tip about stopping resizing.

Speaker 2

Yeah, simple one. If you want to fix size window, just win dot resizable zero zero zero, easy way to lock it down.

Speaker 1

Okay, useful. So we have our basic window frame. But an empty box isn't much of a GUI. You need stuff inside it. The widgets. What are the first building blocks the book introduces.

Speaker 2

Well, the most basic are probably labels. Just text for showing information or instructions uses TTK dot label simple text. Then entry widgets. Those are your standard single line textboxes for getting user input dtk dot.

Speaker 1

Entry right displaying info versus getting input. And the main way to trigger.

Speaker 2

Actions buttons dot ttk dot button. And this is where callbacks become super important. When you create a button, you tell it which Python function to call when it's clicked using the command argument. So you'd have my function name that links the click event to your code.

Speaker 1

So the click is the event command links it to the callback function precisely.

Speaker 2

That function just waits passively until the main loop detects a click on that button, and then it gets executed.

Speaker 1

Nice. The book also mentions usability things like putting the cursor in the right place automatically YEP.

Speaker 2

Using the focus method on a widget. So if you call my entry dot focus, the cursor starts blinking in that text box. Little things like that make a.

Speaker 1

Difference and disabling widgets.

Speaker 2

Yeah, you can set a property when you create it, like a button, so it appears grayed out and doesn't respond to clicks.

Speaker 1

Okay, what about giving users choices not just text entry? Uh?

Speaker 2

Check buttons are covered for simple on off choices like a settings toggle right. They hold their state checked or unchecked, usually zero or one using a special variable pickenter dot infar. You can set the initial state using select an alignment.

Speaker 1

You mentioned sticky before.

Speaker 2

Yes, sticky tk wf and gets used with check buttons to make sure they line up nicely on the left side within their layout. Cell w for.

Speaker 1

West got it, and radio buttons if for picking just one option from a group.

Speaker 2

Exactly radio buttons. The key difference is that a group of radio buttons all share the same kintervariable. When you click one, its value gets assigned to that variable, and the others automatically de select ah.

Speaker 1

So check buttons each have their own variable. Radio buttons share one.

Speaker 2

That's the crucial distinction for managing their state and selecting A radio button can also trigger a callback immediately, maybe to change something else in the GI based on the choice.

Speaker 1

Okay, what about selecting numbers or from a list?

Speaker 2

Spin box controls are good for that. You get a little box with up down arrows. Again, cycle through numbers or even a predefined list of text items.

Speaker 1

Can you react when the value changes?

Speaker 2

Oh yeah, just like a button, You can attach a command callback that fires whenever the stin box value is changed. The book shows an example of displaying the selected value in say a larger text area.

Speaker 1

Larger text area scroll texts exactly.

Speaker 2

Scroll text really useful for multiline input or display. The nice thing is features like word wrapping, wrap ek at word and the scroll bars appearing automatically. They just work. You mainly just defined its width and height.

Speaker 1

Okay, so we can populate a window with widgets, but they'll just pile up, right, How do you organize them? Layout management?

Speaker 2

Yeah, that's the next big step arranging things logically. The core idea the book uses is nesting. You put widgets inside container.

Speaker 1

Fidgets like containers within container pretty much.

Speaker 2

Ttk dot label frame is a key example. It's a container that draws a border around its contents and has a text label. You put related widgets inside a label frame. Then you arrange the label frame itself within the main window, maybe alongside other label frames or widgets. It helps break down complexity.

Speaker 1

And spacing to avoid everything being crammed together.

Speaker 2

Patting pad X for horizontal space, patty for vertical space around each widget. Usually set these when you place the widget using the layout manager.

Speaker 1

The book mentions grid mostly Yes.

Speaker 2

The grid layout manager is heavily featured. It arranges widgets in well a grid of rows and columns. You specify the row and column for each widget.

Speaker 1

And you can tweak padding later too.

Speaker 2

The book points out you can use methods like grid Configure after placing a widget to adjust its padding or other grid options if needed.

Speaker 1

What about when the user resizes the window. Do widgets just stay fixed or can they stretch.

Speaker 2

Ah dynamic expansion. That's where Sticky really comes into play again. We saw sticky tk dot W for left alignment, but you can use tk E eastwright, TK in north top, tks self bottom or combinations like TK dot n SEW to make a widget stretch and fill the entire grid cell. It's in horizontally and vertically as the window.

Speaker 1

Resizes and spanning multiple cells.

Speaker 2

Also crucial, column span two makes a widget take up two columns. Rospan three takes three rows, combining sicki and columns. Thin row span gives you really fine grain control over how your layout adapts.

Speaker 1

Grid is the main tool here. What if the GUI has like tons of options, does it just become one giant window.

Speaker 2

That's where TTK dot notebook comes in. It creates tabbed interfaces. You put different sets of controls on different tabs, keeps the main window much cleaner tabs.

Speaker 1

Okay, that makes sense for complexity. Moving beyond structure, what about the look and feel, making it polished? Giving feedback?

Speaker 2

Right? Standard pop up messages are a basic need. Kinder has built in message box functions show info for infos, show warning for warnings, shower for.

Speaker 1

Errors, and they pause the main GUI.

Speaker 2

Yes, they're modal. The user has to dismiss the message box before they can interact with the main window. Again important behavior.

Speaker 1

The book mentions independent message boxes. What's that about.

Speaker 2

It's more about maybe structuring your code so the call to show a message box is in its own function, perhaps for reuse. There's a small code trick mention to get the text into the body, not the title. And also a reminder if you create a tk instance just to use a message box, might need wind dot withdraw to hide the blank extra window that kinder.

Speaker 1

Creates little details. What about customizing the main window itself title icon pzps.

Speaker 2

Setting the title is just a method call wind dot title my app. The icon usually needs a specific file format dot ico on Windows, and you might need the full paths to the file.

Speaker 1

Any other visual tweaks mentioned like three D effects, Yeah.

Speaker 2

The relief property comes up again. Setting relief sunken or relief raised on widgets like frames or labels can give them that classic embossed or debossed look adds a bit of depth.

Speaker 1

And those little helper texts when you hover over something.

Speaker 2

Tooltips, Yeah, the book shows how to implement them. It actually suggests using an object oriented approach creating a tooltip class ahop again Yeah, it makes the tooltip logic reusable and cleaner to attach to different widgets.

Speaker 1

Okay, And for tasks that take a while showing progress.

Speaker 2

The standard TTK dot progress bar you add it to your layout and the book shows how to start its animation when a task begins and stop it when done, basic visual feedback that something's happening.

Speaker 1

This feels like a natural lead into handling data within the dui and maybe where OP really starts to shine definitely.

Speaker 2

First, the book introduces special tinter variable types like stringvar. These aren't just normal Python strings.

Speaker 1

How are they different?

Speaker 2

They're designed to be linked directly to widgets. If you link a stringvar to an entry widget, changing the string bar in your code automatically updates the text in the entry box, and typing in the entry box updates the stringvar.

Speaker 1

Oh two way binding kind of yeah.

Speaker 2

Use methods like dot set to put a value into the string bar and dot get to recrieve the current value from it.

Speaker 1

And the book notes a quirk about needing a TK instance even just to create a string bar, even if you hide the window.

Speaker 2

Yeah, it's a bit weird. These ticket tenor variables rely on the underlying TK machinery being initialized, which happens when you create TK. So even for non visual use, you might need root ektktk root dot withdrawal.

Speaker 1

So calling dot get on these variables or directly on a widgets like entry is how you pull the user's input back into your Python logic.

Speaker 2

That's the main way. Once you get the value, it's just a standard Python string or number or whatever, and you can work with it. The trick is when to call dot get, usually inside a callbad function.

Speaker 1

The book mentions using module level global variables for simple data sharing, but then pushes towards op pretty strongly.

Speaker 2

Why well, globals are tempting for super simple scripts, quick and easy, but as soon as your GUI gets even a little bit complex, tracking which function modified which global variable becomes a nightmare, really hard to debug OPI. Using classes provides encapsulation. You bundle the data as attributes of an object, together with the methods functions belonging to the

object that operate on that data. It keeps things organized, prevents accidental modification from unrelated code, and makes the whole thing much easier to maintain and extend later.

Speaker 1

So a method is just a function inside a class that acts on the classes data.

Speaker 2

Pretty much, and it usually takes self as it's first argument, which refers to the specific object instance it's working with. The book really emphasizes trying to refactor a messy NONOOPI procedural GUI into oop later is painful. It's much better to start with an OP structure if your project is going to be anything beyond trivial.

Speaker 1

And this connects back to the event driven nature.

Speaker 2

Absolutely, the GUI sits there, an event happens button click, the main loop directs it to the callback. That callback is often an OP method self dot on button click, which then uses self to access the object's data, maybe calls dot get on some widgets, does calculations, and maybe calls dot set on other widgets to update the display.

Speaker 1

Okay, this next one is where I think a lot of people, including me, have hit a wall. Initially, you click a button that app needs to do something slow, and the whole GUI just freezes.

Speaker 2

Ah. Yes, the dreaded unresponsive GUI. It's a classic symptom of doing long running tasks directly in the main GUI thread. Why does it happen because basic kinter and many GI toolkits runs its event loop main loop in a single thread. If that thread gets busy doing something else like downloading a big file, running a complex calculation, querying a slow database, it can't process other events. It can't redraw the window, respond to clicks anything. It's blocked.

Speaker 1

So what's the fix?

Speaker 2

Multi threading? You need to run that long running task in a separate thread. The main thread stays free to run the main loop and keep the GI responsive while the worker thread chugs away in the background.

Speaker 1

Okay, threads. The book distinguishes between threads and processes.

Speaker 2

Briefly, Yes, Processes are more isolated, each with its own memory. Threads run within the same process and share memory. For tasks within a single GUI application that need to communicate back to the GUI, threads are often simpler because sharing data is easier.

Speaker 1

Can that worker thread directly update a techer and widget like change a labels text when it's done?

Speaker 2

Generally No, that's not thread safe. Directly manipulating taker widgets from a background thread can cause crashes or weird behavior.

Speaker 1

So how does the worker thread tell the main GUI thread, Hey, I'm done, here's the result.

Speaker 2

The standard safeway is using Python's q Q. It's a data structure specifically designed for thread safe communication.

Speaker 1

A que like a waiting line exactly.

Speaker 2

The worker thread puts its result onto the que mi que dot dwizzled. The main GUI thread meanwhile periodically checks the queue mi qu dot get no weight. If there's something there, it safely pulls the result off and updates the GUI widgets from within the.

Speaker 1

Main thread, so the Q acts as a safe ordered mailbox between threads.

Speaker 2

Perfect analogy. It decouples the threads FIFO first in, first out means results are typically processed in the order they finish. The book shows how you can pass a Q object around, letting different parts of your code, even in separate modules, feed results back to the GUI thread without freezing it.

Speaker 1

And common examples of slow tasks shown are things like file operations or network calls.

Speaker 2

Yes, using kinter dot request dot a filename is quick, but actually reading or writing a large file could block. Similarly, using erallib dot request dot eurolopin to fetch web data definitely needs a thread if the network is slow where the download is large. The book also stresses using try except blocks around network code to handle potential errors.

Speaker 1

Gracefully makes sense okay, shifting gears to data persistence. The book dives into connecting to my SQL databases, specifically.

Speaker 2

Right, a very common requirement. It uses the miceql dot connector library, which is the official driver from Oracle.

Speaker 1

My school, and the first warning is about security absolutely critical.

Speaker 2

The book hammers this home do not put your database username and password directly in your Python source code. It's a huge security risk if that code ever gets shared or exposed.

Speaker 1

So what should you do?

Speaker 2

Store credential separately? Maybe in a configuration file that's kept in a secure location, has restricted permissions and is read by your application at runtime, or use environment variables or a secrets management system, just not hard coded.

Speaker 1

Okay, what basic database operations does it cover?

Speaker 2

The core crwould operations select to fetch data, insert to add rows, update to change existing rows, delete to remove rows. It also briefly introduces essential database concepts like primary keys, unique IDs for rows and foreign keys, linking related tables.

Speaker 1

And is there a tool mentioned for working with the database outside of Python.

Speaker 2

Yeah, myseql workbench. It's a free GI tool provided by myseql itself, really helpful during development for designing your database schema, running test SQL queries, checking data without needing to build all that into your Python app.

Speaker 1

First, Okay, let's talk about making apps for a global audience. Internationalization and localization I eighteen N and L ten N right.

Speaker 2

Internationalization I eighteen N I plus eighteen letters plus N is about designing your app so it can be adapted. The main part is separating all user visible text labels, button text messages from your code logic. How do you

do that? The book shows using a simple Python class is a I eighteen n that holds dictionaries of strings for different language maybe self dot strings and like you think kell okay, then in your guy code instead of tdk dot label to ttk dot label ticks self dot I t and n dot gets string, gets string greeting by changing which language dictionary the I eighten n object uses eg self dot I ten n dot I ten nd low the whole GUI can switch language.

Speaker 1

That's clever and localization L ten N. That's more than just language.

Speaker 2

Yeah, L ten N L plus ten letters plus n is the actual adaptation to a specific locale. It includes things like date time formats M and D d y y versus D M M y y, currency symbols, number formatting using commas or periods as decimal separators, and crucially, time zones.

Speaker 1

Time zones sound tricky.

Speaker 2

They can be. The book shows using pythons built in DateTime module along with the third party pits library to handle time zone conversions correctly, like displaying a time recorded in UTC for someone in say Pacific time.

Speaker 1

What about displaying characters from other languages like German, Lauts or maybe Asians.

Speaker 2

Unicode handling Python three is generally pretty good with Unicode strings, but sometimes, depending on your operating system, terminal or IDE settings, you might run into encoding issues where characters display incorrectly.

Speaker 1

Any solutions mentioned using.

Speaker 2

Python's direct Unicode escapes like U TOFC for you can be a robust way, or more commonly, ensuring your source code files are saved with UTF eight encoding and that your development environment like pit of eclip settings mentioned in the book is configured to handle UTFA correctly.

Speaker 1

Okay, building all this is great, but it needs to work reliably. Testing. How does the book approach ensuring quality?

Speaker 2

It emphasizes that testing isn't just one thing. It happens at multiple levels. There's developer testing just running the code. Maybe the IDE catches syntax errors using source control like GIT, which helps catch integration conflicts, API testing testing the non GUI logic, integration testing, making sure different parts work together, and finally end user testing.

Speaker 1

All catch in different kinds of bugs.

Speaker 2

Exactly, you need a mix for debugging when things go wrong during development. Buggers, Yeah, using your IDEs debugger is key setting break points to pause the code, inspecting the values of variables at that point using watches stepping through code line by line. The book notes that in GUIs you often want to put break points inside your event handler functions like button callbacks, because that's where the action

happens after the mainloop dispatches an event. It also suggests setting up your own simple logging using Python's logging module. May be configured in the if name equals main part of your script.

Speaker 1

Why custom logging.

Speaker 2

It gives you more control than just print statements. You can set different logging levels, debug info, warning, error, easily switch between logging to the console or a file, and filter messages. It's great for tracing what your application is doing, especially in response to events.

Speaker 1

And for more formal automated tests.

Speaker 2

Python's built in unitist framework is the standard shown. The idea is to write separate test code that imports your application code and verifies its behavior.

Speaker 1

Does that work?

Speaker 2

You create test classes inheriting from unitist dot test case. Inside you write methods whose names start with test. Within these methods, you call parts of your application code and use assertion methods like self dot assert equal actual expected to check if the results are correct.

Speaker 1

But how do you test gy interactions with unitist. You can't easily click a button in a test script.

Speaker 2

Right, You usually don't simulate the physical click. Instead, you test the consequences of the click. The book gives an example. You directly call the callback function associated with a radio button in your test code. Then you check if, say a label widget that should have been updated by that callback, now contains the expected text. You're testing the logic triggered by the event.

Speaker 1

Ah testing the callbacks effect exactly.

Speaker 2

The book also mentions test fixtures set up in tear down methods, which let you run code to prepare the environment before each test, like creating objects and clean up afterwards.

Speaker 1

Okay, Ticker is built in and clearly powerful, but Python's ecosystem is huge. Does the book look at any alternative GUI libraries?

Speaker 2

It does. It takes a look at wx Python, specifically the Phoenix version, which works with modern Python. It's another very popular mature library.

Speaker 1

How's it different from Ticker, Well.

Speaker 2

First, you have to install it separately. It's not built in, often done using pipt af files. The basic structure feels conceptually similar, though you initialize in wx dot app create a main window, wx dot frame, add widgets, and start a mainloof the book notes it has good documentation and often provides widgets that look more native on different operating systems. Plus, things like standard menu mars are easy to set up.

Speaker 1

Can you mix them? Put a wx Python widget inside a kinter window or vice versa.

Speaker 2

The book explores this idea, but the conclusion seems to be it's usually not a good idea. Trying to embed one framework directly inside another often leads to weird rendering issues, crashes, or problems shutting down properly.

Speaker 1

So what if you need parts built with different.

Speaker 2

Toolkits, Launching them is completely separate windows? Maybe even separate processes seems more stable?

Speaker 1

And how would those separate windows talk to each other?

Speaker 2

Back to our friend, the queue que shared cues are presented again as a robust Pythonic way for independent GOI processes, even if built with different frameworks, to pass messages or data back and forth.

Speaker 1

Okay, cool? What about going beyond two D? Does it touch on three D graphics?

Speaker 2

Yep? It introduces libraries for creating true three D scenes, primarily PIOPENNGL, which is Python's binding to the standard open geographics library.

Speaker 1

You'll need to install that and PILT.

Speaker 2

Pilot is often used alongside or instead of piopen gl for handling window creation, event loops, and drawing shapes in three D more easily. The book shows an example of creating a spinning colored three D cube.

Speaker 1

So you can actually control the three dview with keyboard input.

Speaker 2

Yeah, you can capture keypresses within the pilot open gl window and use them to trigger actions like rotating the camera or the three D object.

Speaker 1

Can these three D libraries create their own windows without needing to kin wx.

Speaker 2

Python, Yes, Absolutely, Pilot or even lower level open gl utility libraries like glut can manage their own windows and event loops, specifically for rendering the three D graphics and handling input for that window. The book even shows simple animation examples.

Speaker 1

Okay, one quick step back to two D basics images is to kiner good with images out of the box.

Speaker 2

Uh not really. The built in kinter photo image is surprisingly limited. It handles formats like GIF and PGMPPM, but famously not common ones like JPEG or PNG.

Speaker 1

Previously no JPEGs, nope to.

Speaker 2

Display JPEGs, p and g S and other modern formats in kinter, you pretty much need the Pillow library. It's the modern successor to the old Python Imaging library PIL.

Speaker 1

So you install pillow right PIP and sall pillow.

Speaker 2

Then you use image tk dot photo image from the PIL module. Yes, the import is still often PIL to load your image file and that object can be used in Kinder labels or buttons.

Speaker 1

Got it. So Pillow is essential for real world image handling and teeter that covers a mass of amount of ground, from basic widgets to three D and databases. How does the book tie this all together with advice on writing good gy code best practices.

Speaker 2

It definitely emphasizes writing code that's clean, maintainable, and extendable. A big theme is avoiding spaghetti code. Spaghetti code, yeah, you know, code that's all tangled up, jumps around unpredictably with globals or complex logic flows, impossible to understand or modify without breaking something. The opposite is modular, well structured code.

Speaker 1

How do you achieve that structure in a bigger project with multiple files?

Speaker 2

The book mentions the role of in it dot pi files in making directories into Python packages. It even shows some techniques using CIS dot path or site dot ad, site deer with an in dot PII to help Python find your modules correctly, especially if you're running scripts from different locations outside of IT, and the procedural versus OP discussion comes back. The strong recommendation is for anything beyond a very simple script, use object oriented programming. It just

scales better and makes maintenance feasible. Procedural is okay for tiny utilities.

Speaker 1

What about naming things, files, variables.

Speaker 2

Functions meaningful names? This is stressed. Name your modules based on what they do, like guywidgets dot PI or database connector dot pi, not mod one dot PI or utilsnew dot PI. Same for variables and functions. Make them descriptive, avoid cryptic abbreviations. Consistency helps hugely, especially if you're working in a team, but even just for your future self. Design patterns also get a brief mention, like the factory pattern as a way to handle more complex structural problems

like creating different variations of widgets systematically. It's more of an introduction to the idea that these patterns exist to solve.

Speaker 1

Common problems and just generally managing the complexity as you add more and more features.

Speaker 2

Yeah, it acknowledges GUIs naturally get complex. Practical tips include using label frame containers to visually group related controls, using loops to create multiple similar widgets instead of copy pasting code, and organizing really large UIs into logical sections using TT notebook tabs. These you are always to break down the complexity.

Speaker 1

Wow. Okay, that really was a deep dive into this cookbook. We've gone from literally the first import kinter and main loop right.

Speaker 2

Up to placing widgets, arranging them with grid sticky label frames.

Speaker 1

Handling user input with string bars and callbacks, making things responsive with threads and cues.

Speaker 2

Connecting to my SQL databases, thinking about different languages with I eighteen N.

Speaker 1

And L ten N, testing with unit test, debugging, exploring alternatives like wx Python, even touching on three D with PIOPENNGL and PIGLT, and.

Speaker 2

Finally wrapping up with best practices like OOP and good naming to avoid that spaghetti code.

Speaker 1

This book seems to lay out a really comprehensive path full of practical examples. It shows Python's power, but also points out where you need extra libraries like pillow or pits.

Speaker 2

Yeah, it gives a solid map of the territory for building desktop applications with Python. GUIs covering a lot of the common challenges you'd encounter.

Speaker 1

So having surveyed this whole landscape, from the cops button to networked, database driven apps and even three D, it makes you wonder, for you listening, what kind of GUI challenge, maybe something you've seen elsewhere or thought about building, are you now most curious to try and tackle using Python

Transcript source: Provided by creator in RSS feed: download file
For the best experience, listen in Metacast app for iOS or Android