2017-07-15 8 views
1

私のコードでは、シリアルデータをdataに送って、ラベルに印刷したいと思っていました。そしてボタンとセレクターでオン/オフコマンドを送信したい。 dataをラベルに印刷する以外はすべて問題ありません。次のステップは何でしょうか?シリアルデータを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

あなたの問題について詳しく説明できますか?実行と大丈夫ですか? – Fabien

答えて

0

label["text"]でTkinterラベルの内容を設定/取得できます。

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

とグローバル変数を使用しないでください。

はこのスニペットを使用してください。彼らは本当に悪い習慣です。代わりに、あなたはクラスにあなたのプログラムをラップする必要があります:

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

私はそれをテストすることはできませんが今動作する必要があります。しかし、bt4()はどこで定義されていますか?

+0

実際にはbt4()はbt3()となり、ありがとう –

関連する問題