[NFBCS] Python Issue:

charles.vanek at gmail.com charles.vanek at gmail.com
Sat Jul 25 19:39:31 UTC 2026


Hi Charles Black,

I've never used kicker before, so I was curious.  You can read what OpenAI's
High model came back with here:

https://chatgpt.com/s/t_6a650f87b9bc81918fb16e9751f3255d

 

For anyone who hasn't navigated a ChatGPT. First tip is to navigate heading
level 4.  You'll find "You said" which was my initial prompt which in this
case was basically a debug of the email.  You'll also find at Heading Level
4 "ChatGPT said" which is the response.

 

 

 

From: NFBCS <nfbcs-bounces at nfbnet.org> On Behalf Of Charles E. Black via
NFBCS
Sent: Saturday, July 25, 2026 12:42 PM
To: nfbcs at nfbnet.org
Cc: charleseblack126 at gmail.com
Subject: [NFBCS] Python Issue:

 

Afternoon:

 

I am running a Python script. I am creating a windows form and getting some
information, returning it to the console program and printing it and saving
it to a couple of programs. The problem is that the windows form will not
receive focus. I am a blind person using JAWS, 2026. Below is the base
program and the windows form. If someone could take a look at this and tell
me wha I am doing wrong, it would be appreciated.

 

Base:

 

# ----------------------------------------------

# Console Program to Launch the Tkinter Form

# ----------------------------------------------

 

# Import the custom Tkinter form

from user_form_module import UserForm

 

def main():

    print("Launching the form... Please fill it out.")

 

    # Create instance of the form

    form = UserForm()

 

    # Run the form and wait for user input (blocks here until submitted)

    name, role, comment = form.run()

 

    # Display returned results in console using correct f-string
interpolation

    print("Form completed! Values returned:")

    print(f"Name:    {name}")

    print(f"Role:    {role}")

    print(f"Comment: {comment}")

 

    # Save results to a text file

    with open("form_results.txt", "w") as f:

        f.write(f"Name: {name}\nRole: {role}\nComment: {comment}\n")

 

    print("Values saved to form_results.txt")

 

if __name__ == "__main__":

    main()

 

windows form:

 

# ------------------------------------------------------

# User Form Module (Windows Focus Bypass & JAWS Ready)

# ------------------------------------------------------

 

import tkinter as tk

from tkinter import ttk

import sys

 

class UserForm:

    def __init__(self):

        self.root = tk.Tk()

        self.root.title("User Information Form")

 

        self.name_value = ""

        self.role_value = ""

        self.comment_value = ""

 

        # Handle window close (X button or Alt+F4)

        self.root.protocol("WM_DELETE_WINDOW", self.on_close)

 

        ttk.Label(self.root, text="Enter your name:").pack(padx=10, pady=2)

        self.name_entry = ttk.Entry(self.root)

        self.name_entry.pack(padx=10, pady=2)

 

        ttk.Label(self.root, text="Select your role:").pack(padx=10, pady=2)

        self.role_combo = ttk.Combobox(self.root, values=["Admin", "User",
"Guest"])

        self.role_combo.pack(padx=10, pady=2)

 

        ttk.Label(self.root, text="Additional comments:").pack(padx=10,
pady=2)

        self.comment_entry = ttk.Entry(self.root)

        self.comment_entry.pack(padx=10, pady=2)

 

        ttk.Button(self.root, text="Submit",
command=self.submit_form).pack(padx=10, pady=10)

 

        # Schedule hard focus takeover once event loop begins

        self.root.after(150, self._force_windows_focus)

 

    def _force_windows_focus(self):

        if sys.platform.startswith("win"):

            import ctypes

            user32 = ctypes.windll.user32

            kernel32 = ctypes.windll.kernel32

 

            # Get thread IDs for current foreground window (the IDE) and
Python GUI window

            fg_hwnd = user32.GetForegroundWindow()

            fg_thread_id = user32.GetWindowThreadProcessId(fg_hwnd, None)

            app_thread_id = kernel32.GetCurrentThreadId()

 

            # Attach thread inputs temporarily so OS allows focus transfer

            if fg_thread_id != app_thread_id:

                user32.AttachThreadInput(app_thread_id, fg_thread_id, True)

                

                # Retrieve the actual Win32 window handle for the Tk root

                hwnd = user32.GetParent(self.root.winfo_id())

                if hwnd == 0:

                    hwnd = self.root.winfo_id()

 

                user32.SetForegroundWindow(hwnd)

                user32.SetFocus(hwnd)

                

                # Detach thread input

                user32.AttachThreadInput(app_thread_id, fg_thread_id, False)

 

        # Tkinter internal focus assignments

        self.root.lift()

        self.name_entry.focus_force()

 

    def submit_form(self):

        self.name_value = self.name_entry.get()

        self.role_value = self.role_combo.get()

        self.comment_value = self.comment_entry.get()

        self.root.quit()

        self.root.destroy()

 

    def on_close(self):

        self.root.quit()

        self.root.destroy()

 

    def run(self):

        self.root.mainloop()

        return self.name_value, self.role_value, self.comment_value

 

Thanks for any help.

 

 

Charles Black

Love God, my wife, my children, and my dog, not necessarily in that order.

 

From: Louis Maher <ljmaher03 at outlook.com> 
Sent: Tuesday, July 16, 2024 10:14 AM
To: nfbcs at nfbnet.org
Subject: 2024 Minutes Of The NFB Computer Science Division

 

Hello,

 

Here are the minutes of the 2024 NFB in Computer Science division annual
meeting. Please let me know about any additions or corrections.

 

Note that I am sending this email to the NFBCS email list, and to all 2024
registered division members. For this reason, many people may receive two
copies of these minutes.

 

 

Regards

Louis Maher

Phone: 713-444-7838

Email: ljmaher03 at outlook.com <mailto:ljmaher03 at outlook.com> 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nfbnet.org/pipermail/nfbcs_nfbnet.org/attachments/20260725/47038343/attachment.htm>


More information about the NFBCS mailing list