我正在制作一个GUI来控制我创建的GPIO功能,只是让一些灯闪烁。目前它只是使用tkinter的Entry小部件使用户输入的延迟和用户输入的循环次数同时闪烁两个LED。这就是我的问题出现的地方,当我尝试从Entry小部件中提取输入时,我得到一个'str'错误,这是有道理的,因为我假设条目是字符串数据类型,我的blink函数必须查找整数数据类型?但是,如果我强制这是一个整数我然后得到“无效的文字int()基10”错误提示。请帮忙。
这是我目前的剧本:
免责声明:可能存在一些语法错误。 Deere的防火墙不允许我连接到网络,因此我不得不再次输入所有这些内容。
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 :(得分:1)
command=lambda:Blink(cycle,speed)
您的cycle
和speed
变量在创建相应的输入字段后立即设置了一次。因此它们总是空弦;用户根本没有机会为他们输入值。单击按钮后需要执行.get()
s - 在此lambda中或Blink
本身。
您还需要将输入的字符串转换为整数,并处理输入的字符串不是有效的整数的可能性。