看起来您是通过轮询获取数据的,这意味着您不需要线程或多个进程。只需在您喜欢的界面上轮询设备并绘制一个点即可。
这是一个示例,其中包含一些模拟数据来说明总体思路。它每100毫秒更新一次屏幕。
import Tkinter as tkimport randomclass ServoDrive(object): # simulate values def getVelocity(self): return random.randint(0,50) def getTorque(self): return random.randint(50,100)class Example(tk.frame): def __init__(self, *args, **kwargs): tk.frame.__init__(self, *args, **kwargs) self.servo = ServoDrive() self.canvas = tk.Canvas(self, background="black") self.canvas.pack(side="top", fill="both", expand=True) # create lines for velocity and torque self.velocity_line = self.canvas.create_line(0,0,0,0, fill="red") self.torque_line = self.canvas.create_line(0,0,0,0, fill="blue") # start the update process self.update_plot() def update_plot(self): v = self.servo.getVelocity() t = self.servo.getTorque() self.add_point(self.velocity_line, v) self.add_point(self.torque_line, t) self.canvas.xview_moveto(1.0) self.after(100, self.update_plot) def add_point(self, line, y): coords = self.canvas.coords(line) x = coords[-2] + 1 coords.append(x) coords.append(y) coords = coords[-200:] # keep # of points to a manageable size self.canvas.coords(line, *coords) self.canvas.configure(scrollregion=self.canvas.bbox("all"))if __name__ == "__main__": root = tk.Tk() Example(root).pack(side="top", fill="both", expand=True) root.mainloop()


