Tkinter – Return a Value and Close GUI

Question:

I am a total newbie with GUIs and also tkinter.

I am trying to get 2 inputs from user through a GUI which I implemented with tkinter. After the user give inputs and press the button, I want to return to these 2 inputs and keep doing something else with these 2 inputs. I have checked Return values of Tkinter text entry, close GUI but it did not work for my case.

What I have tried is this:

_Gui.py

import tkinter as tk

def get_input():
    entry1 = entry1.get()
    entry2 = entry2.get()
    return entry1, entry2

root = tk.Tk()
root.geometry("320x240+800+300")

label1 = tk.Label(text="Label1")
label1.config(font=('Helvetica bold',16))
label1.pack()
entry1 = tk.Entry(root)
entry1.config(font=('Helvetica bold',16))
entry1.pack()
label2 = tk.Label(text="Label2")
label2.config(font=('Helvetica bold',16))
label2.pack()
entry2 = tk.Entry(root)
entry2.config(font=('Helvetica bold',16))
entry2.pack()

button = tk.Button(root, text="Start", command=get_input)
button.config(font=('Helvetica bold',16))
button.pack()

root.mainloop()

And in main.py:

import _Gui as gui

if __name__ == "__main__":
    a, b = gui.get_input()
    something_else(a, b)

But it also did not work.

Thanks for your help in advance!

Asked By: codeine

||

Answers:

You can use root.destroy() to destroy the window, but the function get_input() will execute twice after you pressed the button (the other is after the window is destroyed, in your "main.py"), so if you destroyed the window in the first execution, you can’t use entry1.get().

I suggest you use this:

(_Gui.py)

import tkinter as tk

root = tk.Tk()
root.geometry("320x240+800+300")

def get_input():
    global a, b
    a = entry1.get()
    b = entry2.get()
    root.destroy()

label1 = tk.Label(text="Label1")
label1.config(font=('Helvetica bold',16))
label1.pack()
entry1 = tk.Entry(root)
entry1.config(font=('Helvetica bold',16))
entry1.pack()
label2 = tk.Label(text="Label2")
label2.config(font=('Helvetica bold',16))
label2.pack()
entry2 = tk.Entry(root)
entry2.config(font=('Helvetica bold',16))
entry2.pack()

button = tk.Button(root, text="Start", command=get_input)
button.config(font=('Helvetica bold',16))
button.pack()

(main.py)

import _Gui as gui

if __name__ == "__main__":
    gui.root.mainloop()
    something_else(gui.a, gui.b)

(Sorry, my English is not very well.)

Answered By: Zxd2009
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.