Исключение в обратном вызове Tkinter

Я написал код для чтения аналогового значения из моего arduino и отслеживания результатов в простом приложении Python, но когда я нажал кнопку "Пуск" в моем приложении, появилась эта ошибка: исключение в обратном вызове Tkinter Traceback (последний вызов был последним)

и компилятор обнаружил ошибку в этом примере: analoglabel.config(text=str(pin.read()))

извините, я не могу заполнить все сообщения об ошибках

и это мой код:

import pyfirmata
from pyfirmata import util
import Tkinter
from time import sleep

def press():
  it = util.Iterator(board)
  it.start()
  while True:
    if flag.get():
        analoglabel.config(text=str(pin.read()))
        analoglabel.update_idletasks()
        root.update()
    else:
        break
    board.exit()
    root.destroy()

def exit_command():
 flag.set(False)

port = '/dev/ttyACM0'
board = pyfirmata.Arduino(port)
sleep(5)
pin = board.get_pin('a:0:i')

root = Tkinter.Tk()
root.title("Analog read by hamzawi")
root.minsize(300, 50)

startbutton = Tkinter.Button(root,
                          text="START",
                          command=press)
startbutton.grid(column=1, row=2)

exitbutton = Tkinter.Button(root,
                        text="EXIT",
                        command=exit_command)
exitbutton.grid(column=2, row=2)

label = Tkinter.Label(root,
                   text="The value is: ")
label.grid(column=1, row=1)

analoglabel = Tkinter.Label(root, text=" ")
analoglabel.grid(column=2, row=1)

flag = Tkinter.BooleanVar()
flag.set(True)

root.mainloop()

пожалуйста, мне нужна помощь! и большое спасибо

2 ответа

Решение
from tkinter import *

import sys

import tkinter

from time import sleep

import pyfirmata # not in wondows

from pyfirmata import util # not in wondows

def press():

  it = util.Iterator(board)

  it.start()

  while True:

    if flag.get():

        analoglabel.config(text=str(pin.read()))

        analoglabel.update_idletasks()

        root.update()

    else:

        break

    board.exit()

    root.destroy()

def exit_command():

 flag.set(False)

port = '/dev/ttyACM0'

board = pyfirmata.Arduino(port) # not in wondows

sleep(5)

pin = board.get_pin('a:0:i') # not in wondows

root = tkinter.Tk()

root.title("Analog read by hamzawi")

root.minsize(300, 50)

start_button = tkinter.Button(root, text='start', command=press)

start_button.grid(column=1, row=2)

exit_button = tkinter.Button(root, text="EXIT", command=exit_command)

exit_button.grid(column=2, row=2)

label = tkinter.Label(root,

                   text="The value is: ")

label.grid(column=1, row=1)

analoglabel = tkinter.Label(root, text=" ")

analoglabel.grid(column=2, row=1)

flag = tkinter.BooleanVar()

flag.set(True)

root.mainloop()

Первый раз через твой цикл все хорошо. Затем вы уничтожаете корневое окно. В следующий раз через цикл вы попытаетесь настроить виджет метки, но он был уничтожен.

Вы уверены, что хотите уничтожить корневое окно внутри цикла?

Другие вопросы по тегам