【问题标题】:periodic executions with tkinter使用 tkinter 定期执行
【发布时间】:2015-03-05 10:55:58
【问题描述】:

我编写了一个消息传递程序,但在测试时遇到了问题。

如果我想以不同的时间间隔发送消息,比如 100、200 和 300 毫秒,程序会第一次将其应用于所有消息,但如果我在循环中包含 after,它会在速度从 3 到 419 毫秒不等?

有人可以建议我如何将不同的等待时间应用于不同的消息吗?

global running
        i_ref = 0
        items = self.Translist.curselection()

        for i in items:
           i_ref = int(i)
           if(int(transList[i_ref].tTimer) <= 0):
               pass
           else:
               if running == 0:
                   self.retrans = self.window.after(transList[i_ref].tTimer, self.Enter)
                   self.TranButton.config(state = 'disabled')
               else:    
                   running = 0
                   self.window.after_cancel(self.retrans)

           system('echo "%s %s 0x%s %d 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s 0x%s" >/dev/pcan33' %
                (transList[i_ref].msgType,
                transList[i_ref].canType,
                transList[i_ref].canID,
                int(transList[i_ref].DLC),
                transList[i_ref].tData0,
                transList[i_ref].tData1,
                transList[i_ref].tData2,
                transList[i_ref].tData3,
                transList[i_ref].tData4,
                transList[i_ref].tData5,
                transList[i_ref].tData6,
                transList[i_ref].tData7))

这是目前为止的功能代码,通过按键调用。

【问题讨论】:

    标签: python loops tkinter timing


    【解决方案1】:

    after 只保证在给定时间之后 的某个时间运行某些东西,而不是完全按照指定的时间间隔运行。如果您指定 100 毫秒,它可能是 100 毫秒,可能是 101 或 200 或其他任何值。它不是一个实时的高分辨率计时器。在负载较轻的系统中,它通常非常接近。

    请记住,tkinter 在单个线程中运行,一次只能做一件事。如果您在未来安排 100 毫秒的时间,然后您开始运行需要 200 毫秒才能完成的代码,则计时器在该代码完成之前无法运行任何东西,因此即使您请求 100 毫秒,它也将是 200 毫秒或更多,因为它有等待其他代码完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      相关资源
      最近更新 更多