Python Entry Line Will Not Get Keyboard Input - Types in Terminal Instead

Viewed 379

I have been working on a project over the last few weeks where I am interacting with an industrial robot through a wireless connection and using REST protocol through a Raspberry Pi and python. I am new to python but familiar with C++ so I am not new to programming necessarily.

I have created a GUI using Tkinter in python (thanks to a lot of your help already) and I am trying to create a sort of kiosk mode. I already have the GUI launching fullscreen without an option to close it. What I am stuck on is that I am trying to create an entry line in one of the popup windows in my GUI that when the correct password string is entered, it will close the GUI for administrators or authorized personal to be able to access the rest of the Raspberry Pi files if needed. I believe that I know how to make this process work using the root.quit() method (the parent window is root) but the entry line won't even show any text. All text that I type is being typed in terminal even though my GUI is fullscreen. Here is the specific section of code with comments for the popup window that I am trying to get the entry line to be in:

################## Status Window ##################
def statusWindow():                                                     #defines function for popup window for additional options
    window = Toplevel(root)                                             #creates variable to place widgets in window
    window.title('Status')                                              #makes window title for specific window frame
    w, h = window.winfo_screenwidth(), window.winfo_screenheight()      #aquires dimensions from display size
    window.geometry("%dx%d+0+0" % (w, h))                               #sets window size to aquired dimensions
    window.overrideredirect(True)                                       #removes top bar and exit button from parent window frame

    batteryButton = Button(window, text="Battery", fg="green", command=lambda: showBattery(window), width=35, height=12)        #defines criteria for battery button in new window
    statusButton = Button(window, text="Overview", fg="green", command=lambda: showQueueStatus(window), width=35, height=12)    #defines criteria for status button in new window
    returnButton = Button(window, text="Return...", fg="green", command=window.destroy, width=35, height=12)                    ##defines criteria for return button in new window
    passEntry = Entry(window, show="*")

    batteryButton.grid(row=1, column=0, padx=10, pady=5)        #makes button viewable in specified orientation                                                                
    statusButton.grid(row=2, column=0, padx=10, pady=5)         #makes button viewable in specified orientation
    returnButton.grid(row=3, column=0, padx=10, pady=5)         #makes button viewable in specified orientation
    passEntry.grid(row=4, columnspan=10, sticky=W)

    robotName(window)       #call robotName function to display robot name
    winReturn(window)       #call winReturn function to create return label

def robotName(winFrame):                                #define function to display robot name in status window
    label = Label(winFrame, text="Robot Name: ")        #defines variable label for visual display
    name = robot.robot_name()                           #gets robot name from robot and stores it in name variable
    nameLabel = Label(winFrame, text=name)              #defines variable label for visual to hold robot name as string        

    label.grid(row=0, column=0, padx=10, pady=5)        #makes label display in popup window
    nameLabel.grid(row=0, column=3, padx=10, pady=5)    #makes robot name display in popup window

def showBattery(winFrame):                                  #define function to display current battery percentage in popup window
    battery = robot.battery_percentage()                    #retrieves current battery status from robot and stores it in battery variable
    battery = str(battery) + '%'                            #redefines battery variable as previous battery variable string with percentage
    batteryLabel = Label(winFrame, text=battery)            #defines battery label with specified criteria
    batteryLabel.grid(row=1, column=3, padx=10, pady=5)     #displays battery label in popup window

def showQueueStatus(winFrame):                              #define function to display current robot mission queue item status
    queue = robot.robot_state_text()                        #retrieves current queue item status and stores in queue variable
    qStatusLabel = Label(winFrame, text=queue)              #defines queue status label with specified criteria
    qStatusLabel.grid(row=2, column=3, padx=10, pady=5)     #displays queue status label in popup window

def winReturn(winFrame):                                        #define function to display label for return button
    returnLabel = Label(winFrame, text="Close out of window")   #defines return label with specified criteria
    returnLabel.grid(row=3, column=3, padx=10, pady=5)          #displays return label in popup window

I have placed the entry line in the statusWindow() definition as this is the method that gets called from the rest of my program. If you have any ideas why its not letting me type in the entry line, your advice would be appreciated. If more samples of my code is needed, I can post more but I was trying to keep this post short.

2 Answers
Related