我有一个小的Tkinter应用程序来显示一些串行通信。 它有两个文本组件(user_input和log)和一个' Send'按钮。
何时发送'按下,无论user_input中写入什么都发送到串口。
def send_clicked(self):
data = self.user_input.get(1.0, END)[:-1] + '\0'
self.serial.write(str(data))
self.user_input.delete(1.0, END)
此方法每100毫秒运行一次,以在日志文本组件中显示串行输出:
def read_serial(self):
self.log.update() # display input text
self._read_character()
self.after(100, self.read_serial) # check serial again soon
def _read_character(self):
c = self.serial.read() # attempt to read a character from Serial
# was anything read?
while len(c) > 0:
# get the buffer from outside of this function
# check if character is a delimeter
if c == '\r':
c = '' # don't want returns. chuck it
if c == '\n':
self.serial_buffer += "\n" # add the newline to the buffer
self.log.insert(END, self.serial_buffer)
self.log.yview(END)
self.serial_buffer = "" # empty the buffer
else:
self.serial_buffer += c # add to the buffer
c = self.serial.read()
这在windows,linux和mac中运行良好。
现在我要打印">>值"在响应文本,当用户点击“发送”时,我重新定义send_clicked:
def send_clicked(self):
data = self.user_input.get(1.0, END)[:-1] + '\0'
self.serial.write(str(data))
self.log.insert(END, '>> %s\n' % data)
self.log.yview(END)
self.user_input.delete(1.0, END)
这导致窗口在MacOS中停止刷新(它在linux和windows中工作正常),我必须在窗口外单击并单击返回以进行刷新。现在我已经提供了一个菜单,我也可以点击菜单中的一个按钮来获取更新。
答案 0 :(得分:1)
如果您正在运行OSX 10.9(Mavericks),则问题很可能是this。我建议更新你当前版本的Tcl / Tk,甚至更新到最新版本的Python(特别是如果你还在使用3.3)。希望这有帮助!