hit*_*wen 5 python macos user-interface tkinter
我有一个小的Tkinter应用程序来显示一些串行通信.它有两个Text组件(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)
Run Code Online (Sandbox Code Playgroud)
此方法还每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()
Run Code Online (Sandbox Code Playgroud)
这在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)
Run Code Online (Sandbox Code Playgroud)
这导致窗口在MacOS中停止刷新(它在linux和windows中工作正常),我必须在窗口外单击并单击返回以进行刷新.现在我已经找到了一个菜单,我也可以点击菜单中的一个按钮来获取更新.
小智 1
如果您运行的是 OSX 10.9 (Mavericks),则这很可能就是问题所在。我建议更新您当前版本的 Tcl/Tk,甚至更新到最新版本的 Python(特别是如果您仍在使用 3.3)。希望这可以帮助!
归档时间: |
|
查看次数: |
246 次 |
最近记录: |