Michael Mulvey
Michael Mulvey

Reputation: 131

Can you have two instances of tkinter in Python?

Is it possible to have two instances of tkinter ?

import tkinter as tk
import tkinter as sk

root = tk.Tk()
root2 = sk.Tk()

....some window with tk

....some window with sk
root.mainloop()
root2.mainloop()

then have a Toplevel() in both instances.

Upvotes: 0

Views: 1263

Answers (2)

Michael Mulvey
Michael Mulvey

Reputation: 131

By creating 2 instances or tkinter I can close one instance and all top Levels of that instance. Leaving the second Instance open and running with it's Toplevel instances. This is useful in the sense where I use it for a User preference file. Where it checks for a userfile database for keeping track of variables. I use a csv file to save user variable using pandas. This in turn keeps all the form information in my app safe from being erased after closing the application or accidentally closing the window. Adding AtExit saves the info closing the addinfo window and continues to run the main application. That was my reasoning for having asked the question. I have since found that using multiple Toplevel(s) is a better choice as it will also produce the same result. So my menu items all have a separate instance definition and can be closed in the same manner ,making error checks with each closed window.

from tkinter import Tk,Label,Entry,Button,Toplevel 
root=Tk()

def about():
    ab=Toplevel()
    # About stuff for this window
    ab.mainloop()

def info():
    inf=Toplevel()
    # Information Stuff for this window.
    inf.mainloop()

def getUserInfo():
    # User info using pandas
    getUserInfo.mainloop()

root.mainloop()

Upvotes: 0

Bryan Oakley
Bryan Oakley

Reputation: 386240

You can, but the way it works likely won't be like what you expect. Importing it twice isn't the problem (but neither is it the solution). No matter how you import it or how often you import it, creating more than one instance of Tk is the problem. Each instance is backed by a separate internal interpreter. Images and variables and widgets created in one won't exist in the other.

If you need more than one window, it's usually best if second and subsequent windows are instances of Toplevel.

Upvotes: 4

Related Questions