2017-07-15 2 views
1

Dans mon code, je veux recevoir des données série à data et je voulais imprimer sur l'étiquette. Et voulu envoyer commande on/off par bouton et sélecteur. Tout est ok sauf l'impression du data dans l'étiquette. Quelle sera la prochaine étape?Comment imprimer des données série dans une étiquette en python?

import serial 
import Tkinter 
from Tkinter import * 
win = Tk() 
ser = serial.Serial('com8',9600) 
def bt1(): ser.write('on') 
def bt2(): ser.write('off') 
def bt3(): ser.write(v.get()) 

def makewindow(): 
    global v,d 
    frame1 = Frame(win) 
    frame1.pack(side = LEFT) 
    b1 = Button(frame1, text = "ON", command = bt1) 
    b2 = Button(frame1, text = "OFF", command = bt2) 
    b1.grid(row = 0, column = 0) 
    b2.grid(row = 0, column = 1) 

    frame2 = Frame(win) 
    frame2.pack() 
    v = StringVar() 
    r1 = Radiobutton(frame2,text = 'on', variable = v, value = 'on') 
    r2 = Radiobutton(frame2,text = 'off', variable = v, value = 'off') 
    r1.select() 
    b3 = Button(frame2, text = 'send', command = bt4) 
    b3.pack(sid = RIGHT, padx = 5) 
    r1.pack(side = LEFT) 
    r2.pack(side = LEFT) 

    frame3 = Frame(win) 
    frame3.pack() 
    d = StringVar() 
    d.set('default') 
    label = Label(frame3, textvariable = d, relief = RAISED) 
    label.pack(side = RIGHT) 
    return win 

def update(): 
    data = ser.readline(ser.inWaiting()) 
    win.after(100,update) 


update() 
win = makewindow() 
win.mainloop() 
+0

Pouvez-vous être plus précis sur votre problème? Qu'est-ce qui ne va pas avec l'exécution? – Fabien

Répondre

0

Vous pouvez définir/obtenir le contenu d'une étiquette Tkinter avec label["text"].

Utilisez cet extrait:

def update(): 
    global d 
    data = ser.readline(ser.inWaiting()) 
    d.set(data) 

Et s'il vous plaît ne pas utiliser des variables globales. Ils sont vraiment une mauvaise pratique. Au lieu de cela, vous devriez envelopper votre programme dans une classe:

import serial 
import Tkinter 
from Tkinter import * 
class SerialViewer: 
    def __init__(self): 
     self.win = Tk() 
     self.ser = serial.Serial('com8',9600) 

    def bt1 (self): 
     self.ser.write('on') 

    def bt2 (self): 
     self.ser.write('off') 

    def bt3 (self): 
     self.ser.write(self.v.get()) 

    def makewindow (self): 
     frame1 = Frame(self.win) 
     frame1.pack(side = LEFT) 
     b1 = Button(frame1, text = "ON", command = self.bt1) 
     b2 = Button(frame1, text = "OFF", command = self.bt2) 
     b1.grid(row = 0, column = 0) 
     b2.grid(row = 0, column = 1) 

     frame2 = Frame(self.win) 
     frame2.pack() 
     self.v = StringVar() 
     r1 = Radiobutton(frame2,text = 'on', variable = self.v, value = 'on') 
     r2 = Radiobutton(frame2,text = 'off', variable = self.v, value = 'off') 
     r1.select() 
     b3 = Button(frame2, text = 'send', command = self.bt4) 
     b3.pack(sid = RIGHT, padx = 5) 
     r1.pack(side = LEFT) 
     r2.pack(side = LEFT) 

     frame3 = Frame(self.win) 
     frame3.pack() 
     self.d = StringVar() 
     self.d.set('default') 
     label = Label(frame3, textvariable = self.d, relief = RAISED) 
     label.pack(side = RIGHT) 

    def update(self): 
     data = self.ser.readline(self.ser.inWaiting()) 
     self.d.set(data) 
     self.win.after(100,self.update) 

    def run(self): 
     self.makewindow() 
     self.update() 
     self.win.mainloop() 

SerialViewer().run() 

Doit fonctionner maintenant même si je suis incapable de le tester. Mais où est défini bt4()?

+0

En fait bt4() sera bt3() et merci beaucoup –