拉tkinter条目小部件字符串时出错

时间:2017-01-12 18:25:16

标签: python-3.x tkinter

我正在制作一个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)

1 个答案:

答案 0 :(得分:1)

command=lambda:Blink(cycle,speed)

您的cyclespeed变量在创建相应的输入字段后立即设置了一次。因此它们总是空弦;用户根本没有机会为他们输入值。单击按钮后需要执行.get() s - 在此lambda中或Blink本身。

您还需要将输入的字符串转换为整数,并处理输入的字符串不是有效的整数的可能性。