Tkinter main window focus
Solution for Windows is a littlebit tricky - you can't just steal the focus from another window, you should move your application to foreground somehow.But first, I suggest you to consume a littlebit of windows theory, so we're able to confirm, that this is what we want to achieve.
As I mentioned in comment - it's a good opportunity to use the SetForegroundWindow function (check restrictions too!). But consider such stuff as a cheap hack, since user "owns" foreground, and Windows would try to stop you at all cost:
An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.
Also, check a remark on this page:
The system automatically enables calls to SetForegroundWindow if the user presses the ALT key or takes some action that causes the system itself to change the foreground window (for example, clicking a background window).
Here's goes a simplest solution, since we're able to emulate Alt
press:
import tkinter as tkimport ctypes# store some stuff for win api interactionset_to_foreground = ctypes.windll.user32.SetForegroundWindowkeybd_event = ctypes.windll.user32.keybd_eventalt_key = 0x12extended_key = 0x0001key_up = 0x0002def steal_focus(): keybd_event(alt_key, 0, extended_key | 0, 0) set_to_foreground(window.winfo_id()) keybd_event(alt_key, 0, extended_key | key_up, 0) entry.focus_set()window = tk.Tk()entry = tk.Entry(window)entry.pack()# after 2 seconds focus will be stolenwindow.after(2000, steal_focus)window.mainloop()
Some links and examples:
Not sure what issue you face. But below is sample code which worked great for me.
from tkinter import *window = Tk()def handle_focus(event): if event.widget == window: window.focus_set() input1.focus_set()label1 = Label(window,text = "Enter Text 2")input1 = Entry(window, bd=5)label2 = Label(window,text = "Enter Text 2")input2 = Entry(window, bd=5)submit = Button(window, text="Submit")label1.pack()input1.pack()label2.pack()input2.pack()submit.pack(side=BOTTOM)window.lift()window.attributes("-topmost", True)window.bind("<FocusIn>", handle_focus)hwnd = window.winfo_id()window.mainloop()
This was tested using Latest Python 3.6 on Windows 10.
The result was that after running the program, I could just start typing and and he input would go to the first text box