Ich habe in den letzten Wochen an einem Projekt gearbeitet, wo ich mit einem Industrieroboter über eine drahtlose Verbindung und REST-Protokoll über ein Raspberry Pi und Python interagieren . Ich bin neu bei Python aber vertraut mit C++, daher bin ich nicht neu in der Programmierung notwendig.Python Eingabezeile wird nicht Tastatureingabe - Typen im Terminal statt
Ich habe eine GUI mit Tkinter in Python erstellt (dank vieler Ihrer Hilfe bereits) und ich versuche, eine Art von Kiosk-Modus zu erstellen. Ich habe bereits die GUI gestartet Vollbild ohne eine Option, um es zu schließen. Woran ich festhalte, ist, dass ich versuche, in einem der Popup-Fenster in meiner GUI eine Eingabezeile zu erstellen, die bei Eingabe der korrekten Passwort-Zeichenkette die GUI für Administratoren oder autorisierte Personen schließt, um auf den Rest zugreifen zu können der Raspberry Pi-Dateien, falls erforderlich. Ich glaube, dass ich weiß, wie dieser Prozess mit der root.quit() -Methode funktioniert (das übergeordnete Fenster ist root), aber die Eingabezeile zeigt überhaupt keinen Text. Der gesamte Text, den ich eintippe, wird im Terminal eingegeben, obwohl meine GUI Vollbild ist. Hier ist der spezifische Code-Abschnitt mit Kommentaren für die Popup-Fenster, das ich versuche, die Eingabezeile zu erhalten, um 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
ich die Eingabezeile in der Statuswindow() Definition gesetzt habe, da dies die Methode das wird vom Rest meines Programms aufgerufen. Wenn Sie irgendwelche Ideen haben, warum es mich nicht die Eingabezeile eingibt, würde Ihr Rat geschätzt werden. Wenn mehr Beispiele meines Codes benötigt werden, kann ich mehr posten, aber ich habe versucht, diesen Beitrag kurz zu halten.
Hallo J.Kors. Es gibt eine Menge Code hier und es wäre am besten, wenn Sie ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) bereitstellen könnten. Möglicherweise gibt es etwas in Ihrem Code, das dieses Problem verursacht, und wenn Sie ein MCVE erstellen, können Sie das Problem selbst finden. Und wenn das Problem weiterhin besteht, würde es uns etwas bieten, mit dem wir testen können. –
Ich stimme zu, dass es etwas in meinem Code gibt, das es verbietet, Benutzertext in eine Eingabezeile einzugeben. Ich habe ein zweites, kleineres Programm erstellt, das nur für eine Eingabezeile funktioniert. Meine Vermutung ist, dass es etwas mit den Tkinter-Frames zu tun hat, die ich verwende. Könnte es der Schwerpunkt der Widgets sein? –
Ich sehe in dem Code, den Sie uns bisher gezeigt haben, nichts, was dazu führen kann, dass der Benutzer in die Konsole statt in das Eingabefeld eintippt. Verfügt der Benutzer über eine Maus, mit der er interagieren kann, oder handelt es sich um eine Touchscreen-Basis? –