J'ai écrit un code pour lire une valeur analogique de mon arduino et surveiller les résultats dans une simple application Python, mais lorsque j'ai appuyé sur le bouton "démarrer" dans mon application, cette erreur est apparue: Exception dans Tkinter callback Traceback (dernier appel en dernier)

Et le compilateur a localisé l'erreur dans cette instruction: analoglabel.config (text = str (pin.read ()))

Désolé je ne peux pas remplir tout le message d'erreur

Et voici mon code:

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()

S'il vous plaît j'ai besoin d'aide !! et merci beaucoup

-2
Hamza Boughraira 10 juil. 2015 à 21:02

2 réponses

Meilleure réponse
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()
-3
SuperBiasedMan 1 sept. 2015 à 09:48

La première fois dans votre boucle, tout va bien. Vous détruisez ensuite la fenêtre racine. La prochaine fois que vous parcourez la boucle, vous essayez de configurer le widget d'étiquette, mais il a été détruit.

Êtes-vous sûr de vouloir détruire la fenêtre racine à l'intérieur de votre boucle?

0
Bryan Oakley 10 juil. 2015 à 19:39