在Python3中使用Tkinter entry小部件写入串行设备

2024-09-24 16:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python和raspberry Pi非常陌生,我用它来编写代码。我需要将串行命令发送到一个连接到raspberry Pi的设备上,然后根据我的命令生成频率。为了将它连接到串行设备,我使用下面显示的代码。在

import serial

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

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

^{pr2}$

上面显示的命令将允许生成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():应该从entry widget获取“Frequency”值并向串行设备写入一个命令,但是我得到了以下错误。在

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

我不确定下一步要做什么,因为单词“port”是用来显示串行目的地的,显示在代码的顶部。在

非常感谢任何帮助。在


Tags: totextin命令mastersendgetport