与tkin的定期处决

2024-06-25 23:57:52 发布

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

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

如果我想以不同的时间间隔发送消息,比如说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))

这是迄今为止的功能代码,通过按钮按下调用


Tags: self程序ref消息if时间itemswindow
1条回答
网友
1楼 · 发布于 2024-06-25 23:57:52

after只保证在给定时间之后的某个时间运行某个程序,而不是完全按照指定的时间间隔运行。如果指定100ms,则可以是100ms,也可以是101或200或其他任何值。它不是一个实时、高分辨率计时器。在轻负载系统中,它通常非常接近

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

相关问题 更多 >