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.
source to share
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()
source to share