When you are creating graphical user interfaces (GUIs), you will often find that you need to create more than one window. In this tutorial, you will learn how to create two windows with PySimpleGUI.
PySimpleGUI is one of the easiest Python GUIs to get started with. It wraps other Python GUIs and gives them a common interface. You can read more about it in my Intro to PySimpleGUI or in my article for Real Python, PySimpleGUI: The Simple Way to Create a GUI With Python.
You will want to install PySimpleGUI to get started using it. You can use pip for that:
Making a Window Modal
PySimpleGUI provides a Window Element that you use to display other Elements in, such as buttons, text, images, and more. These Windows can be made Modal. A Modal Window won’t let you interact with any other Windows in your program until you exit it. This is useful when you want to force the user to read something or ask the user a question. For example, a modal dialog might be used to ask the user if they really want to Exit your program or to display an end-user agreement (EULA) dialog.
You can create two Windows and show them both at the same time in PySimpleGUI like this:
When you run this code, you will see a small Main Window that looks like this:
If you click on the “Open Window” button, you will get a new Window that looks like this:
This second window has a parameter named modal in it that is set to True. That means you cannot interact with the first Window until you close the second one.
Now let’s look at a way that you can shorten your code if you are creating a simple Window like the one above.
Creating a New Window In-Line
You don’t have to write a completely separate function for your secondary Window. If you’re not going to have a lot of widgets in the second Window, then you can create the Window as a one or two-liner.
Here is one way to do that:
In this example, when you click the “Open Window” button, it creates the secondary Window in a conditional statement. This Window calls read() directly and closes when the user chooses “Yes”, “No” or exits the Window. Depending on what the user chooses, the conditional will print out something different.
The Traditional Multiple Window Design Pattern
PySimpleGUI has a recommended method for working with multiple windows. It is mentioned in their Cookbook and in their demos on Github. Here is an example from Demo_Design_Pattern_Multiple_Windows.py:
When you run this code, you can open up several different windows that look like this:
You will want to try out using both of these methods to see which works the best for you. The nice thing about this method is that you have only one event loop, which simplifies things.
PySimpleGUI lets you create simple as well as complex user interfaces. While it’s not covered here, you can also use sg.popup() to show a simpler dialog to the user. These dialogs are can be modal too but are not fully customizable like a regular Window is.
Give PySimpleGUI a try and see what you think.