使用Python 3中的Tkinter条目小部件写入串行设备

时间:2017-12-08 15:22:56

标签: python tkinter

我是Python的新手,也是我用来编写这段代码的raspberry Pi。我需要将串行命令发送到连接到树莓派的设备,然后根据我的命令生成频率。要将其连接到串行设备,我使用下面显示的代码。

import serial

port = serial.Serial("/dev/ttyACM0", baudrate = 115200, timeout=3.0)

如果我要向串行设备写一个直接命令,它可以正常工作。

port.write(b"f1000.0W0.0")

上面显示的命令将允许生成1000MHz的信号。但是,我需要能够使用一个输入系统,它可以输入我输入的任何数字,而不仅仅是硬编码的输入系统。为此,我尝试使用输入小部件。

from tkinter import *
import serial

port = serial.Serial("/dev/ttyACM0", baudrate = 115200, timeout=3.0)


def show_entry_fields():
   print("Frequency in MHz: %s\nPower in dB: %s" % (e1.get(), e2.get()))

def close_window(): 
    master.destroy()

def send_to_sig_gen():
    print(b"f.0W0.0")
    port.write(b"f%s.0W0.0" % (e1.get()))

master = Tk()
master.title("FYP1 GUI")
Label(master, text="Frequency (MHz)").grid(row=0, column=0)
Label(master, text="Power (dB)").grid(row=1, column=0)

master.minsize(width=250, height=75)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)


Button(master, text='Exit', command=close_window).grid(row=2, column=0, sticky=W, pady=4)
Button(master, text='Display', command=show_entry_fields).grid(row=2, column=1, sticky=W, pady=4)
Button(master, text='Send', command=send_to_sig_gen).grid(row=3, column=1, sticky=W, pady=4)

mainloop( )

def send_to_sig_gen(): 应该采用"频率"来自条目小部件的值并将命令写入串行设备,但我得到以下错误。

Exception in Tkinter callback
Traceback (most recent call last):
   File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
      return self.func(*args)
   File "/home/pi/Desktop/Python_codes/fyp_gui_I.py", line 16, in send_to_sig_gen
      port.write(b"f%s.0W0.0" % (e1.get()))
NameError: name 'port' is not defined

我不确定我接下来需要做什么,因为“端口”这个词是'用于显示串行目标的内容,显示在代码顶部。

非常感谢任何帮助。

0 个答案:

没有答案