2017-01-12 5 views
-3

So habe ich Python vor drei Tagen abgeholt und ich bin dabei, ein Programm zu machen. Dies ist auch meine erste Erfahrung mit dem Programmieren so einfach mit mir. Ich habe UNGEWÖHNLICH viel Zeit damit verbracht zu lernen, und bis jetzt war ich in der Lage, meinen Weg vorwärts zu kriechen, aber ich fürchte, ich stecke fest.Fehler ziehen tkinter Eintrag Widget Zeichenfolge

Ich bin dabei, eine GUI zu erstellen, um eine GPIO-Funktion zu steuern, die nur ein paar Lichter blinken lässt. Zur Zeit werden nur zwei LEDs gleichzeitig mit einer vom Benutzer eingegebenen Verzögerung und einer vom Benutzer eingegebenen Anzahl von Schleifen blinken, die das Eingabe-Widget von tkinter verwenden. Dies ist der Punkt, an dem mein Problem auftritt, wenn ich versuche, die Eingaben aus dem Eingabe-Widget zu ziehen, bekomme ich einen 'str'-Fehler, der Sinn macht, da ich annahme, dass der Eintrag vom String-Datentyp ist und meine Blinkfunktion nach einer Ganzzahl suchen muss Datentyp? Wenn ich dies jedoch zu einer Ganzzahl erzwinge, dann bekomme ich eine Fehlermeldung "ungültig für literal int() base 10". Bitte helfen Sie.

Hier ist meine aktuelle Skript:

Haftungsausschluss: Es kann einige Syntaxfehler sein. Die Firewall von Deere erlaubt mir nicht, mich mit dem Netzwerk zu verbinden, also musste ich das alles neu eingeben.

import tkinter as tk 
root=tk.Tk() 
root.title("LED Controller") 
import sys 
import RPi.GPIO as GPIO 
import time 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(7, GPIO.OUT) 
GPIO.setup(11,GPIO.OUT) 

CycleLabel = tk.Label(root, text="Cycles", font="Verdana 12 bold") 
CycleLabel.grid(row=1,column=1) 
CycleInput = tk.Entry(root) 
CycleInput.grid(row=1,column=2) 
CycleInput.focus_set() 
cycle=CycleInput.get() 

SpeedLabel = tk.Label(root, text="Speed", font="Verdana 12 bold") 
SpeedLabel.grid(row=1,column=1) 
SpeedInput = tk.Entry(root) 
SpeedInput.grid(row=2,column=2) 
SpeedInput.focus_set() 
speed = SpeedInput.get() 

def callback(): 
    print (CycleInput.get()) 
    print (SpeedInput.get()) 

def Blink(cycle,speed): 
    for platypus in range (0, cycle):   ** This is the line that the error always points to. 
     print("Loop" + str(platypus+1)) 
     GPIO.output(7,True) 
     GPIO.output(11, True) 
     time.sleep(speed) 
     GPIO.output(7, False) 
     GPIO.output(11, False) 
     time.sleep(speed) 
     print("Done") 

ButtonFrame = tk.Frame(root) 
ButtonFrame.grid(row=3,column=1,columnspan=3) 

B2 = tk.Button(ButtonFrame, text="Start", width=10, command=lambda:Blink(cycle,speed), font="Verdana 10 bold") 
B2.grid(row=3,column=2) 

B1 = tk.Button(ButtonFrame, text"Print Inputs", width=10, command=callback, font="Verdana 10 bold") 
B1.grid(row=3,column=1) 

def clear(): 
    CycleInput.delete(0, 'end') 
    SpeedInput.delete(0, 'end') 

B3 = tk.Button(ButtonFrame, text="Clear", width=10, command=clear, font="Verdana 10 bold") 
B3.grid(row=3,column=3) 

CloseFrame = tk.Frame(root) 
CloseFrame.grid(row=4, column=1, columnsapn=3) 

B4 = tk.Button(CloseFrame, text="Close", width=20, command=root.destroy, font="Verdana 10 bold", activebackground='red') 
B4.grid(row=4,column=2) 
+0

Haben Sie nach einer Antwort gesucht? Ihre Frage zeigt keine Anzeichen von Forschung. Ich schlage vor, Sie beginnen mit der Suche nach "[tkinter] gpio". Zu dem Zeitpunkt, an dem ich dies schreibe, gibt es 58 Fragen, von denen einige dieser Frage wahrscheinlich sehr ähnlich sind. –

+0

Meine Frage bezieht sich nicht einmal auf das GPIO. – Raudert

+0

Schätzen Sie die Hilfe! :) – Raudert

Antwort

1
command=lambda:Blink(cycle,speed) 

Ihre cycle und speed Variablen wurden genau einmal gesetzt, unmittelbar nach der entsprechenden Eingabefelder zu schaffen. Sie werden daher immer leere Saiten sein; Der Benutzer hatte überhaupt keine Chance, einen Wert für sie einzugeben. Sie müssen die .get() s tun, nachdem die Schaltfläche geklickt wurde - entweder in diesem Lambda oder in Blink selbst.

Sie müssen auch die eingegebenen Zeichenfolgen in Ints konvertieren und die Möglichkeit behandeln, dass die eingegebenen Zeichenfolgen nicht gültig waren.