Python input string won't enter keyboard input - types in terminal instead of

I've been working on a project for the past few weeks where I interact with an industrial robot over a wireless connection and using the REST protocol via Raspberry Pi and python. I am new to python but familiar with C ++ so I am not new to programming.

I have created a GUI using Tkinter in python (thanks to your great help already) and I am trying to create a kind of kiosk mode. I already have a GUI launching full screen mode without the option to close it. I am stuck in that I am trying to create an input string in one of the pop-ups in my GUI when when I enter the correct password string it will close the GUI for administrators or an authorized person to be able to access the rest of the Raspberry Pi files if it is necessary. I believe I know how to get this process to work using the root.quit () method (the parent window is root), but the input line doesn't even display any text. All of the text I type is entered into the terminal, even though my GUI is full screen.Here is the specific section of code with comments for the popup where I am trying to get the input string:

################## 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 put the input line in the definition of statusWindow (), as this is the method that is called from the rest of my program. If you have any ideas why this is preventing me from entering an input string, your advice would be appreciated. If more samples of my code are required, I can post more, but I tried to keep this post short.

+3


source to share


2 answers


Without seeing how your program works, you don't need to create a top-level window to request administrator access. You can use the tkinters simpledialog function to prompt askstring

for a password and then use iconify()

to minimize the window.

Take a look at this example.



from tkinter import *
from tkinter import simpledialog
# from Tkinter import * # for python 2.x
# import tkSimpleDialog as simpledialog # for python 2.x

root = Tk()
root.attributes("-fullscreen", True)# fullscreen without the standard window buttons

def check_admin_password():
    # use askstring here to verify password.
    pass_attempt = simpledialog.askstring("Verifying access",
                                           "Please enter Admin password")
    if pass_attempt == "password":
        root.iconify() # used whatever your instance of Tk() is here in place of root.

admin_minimize_button = Button(root, text = "Minimize window", command = check_admin_password)
admin_minimize_button.pack()

root.mainloop()

      

+2


source


You can do

passEntry.bind('<Return>', myfunc)

      



to call the password check function, decide what to do, etc. If you need to hide fullscreen gui try

root.tk.call('wm', 'withdraw', root)

      

0


source







All Articles