python函数的计时器

时间:2016-12-17 13:21:54

标签: python function timer mouse

我正在尝试自动点击鼠标。我现在的主要问题是如何为每个功能执行一个计时器,例如,功能1工作约15分钟,然后功能2在15分钟后开始工作一次,然后回到功能1.我想功能4与其他人独立工作,我希望它每次都能点击,即使功能1正在运行(我不确定这是否可行)这里是我的代码:

    import pyautogui, sys
pyautogui.size()
(1280, 800)

def function1():
        pyautogui.click(button='left', x=619, y=266) 
        pyautogui.PAUSE = 3.9
        pyautogui.click(button='left', x=617, y=475)

def function2():
        pyautogui.click(button='left', x=624, y=347)
        pyautogui.PAUSE = 5.0
        pyautogui.click(button='left', x=615, y=431)
        pyautogui.PAUSE = 5.0
        pyautogui.click(button='left', x=315, y=483)
        pyautogui.PAUSE = 5.0
        pyautogui.click(button='left', x=616, y=390)


def function3 ():
        pyautogui.click(button='left', x=617, y=522)
        pyautogui.PAUSE = 5.0


def function4():
        pyautogui.click(button='left', x=1257, y=432)

谢谢大家:)

1 个答案:

答案 0 :(得分:0)

由于在不引入信号和多线程的情况下独立等待管理多个功能并不容易,这是使用click()库管理多个PyAutoGUI函数的另一种方法。

  

解决方案是一个多序列器类(称为class TimerExec)。

第1步 - 使用class TimerSeq存储音序器参数

  

只需要构造函数

class TimerSeq:
    def __init__(self, iseq, tseq, bexe, bloop):    
        self.iseq = iseq
        self.tseq = tseq
        self.bexe = bexe
        self.bloop = bloop

第2步 - 创建class TimerExec以管理顺控程序列表

  

构造函数创建一个空列表

class TimerExec:
    def __init__(self):
        self.list = [ ]
        self.stop = True
        self.chrono = -1
        self.delay = -1
  

一个简单的浮点秒值到int毫秒

#
# convert float seconds to milliseconds
def tomilli(self, fsec):
    return int(round(fsec * 1000))
  

在列表中添加新的音序器

#
# append new sequences to the list
def append(self, func, loop=False):
    self.list.append([func, TimerSeq(-1, -1, False, loop)])
    print('list:',self.list)
  

验证顺控程序是否完成或循环时重新启动

#
# check end of sequence or restart
def nextcheck(self, seq):
    if seq[1].iseq >= len(seq[0]):
        if seq[1].bloop:
            seq[1].iseq = 0 # restart
        return True
    return False
  

计算当前音序器中下一个序列的参数

#
# switch to the next sequence
def nextstep(self, seq):
    if seq[1].iseq >= len(seq[0]):
        return True
    seq[1].iseq = seq[1].iseq+1
    seq[1].tseq = self.tomilli(time.time())
    seq[1].bexe = False
    return False
  

管理当前的音序器并执行当前的功能   延迟下一个序列

#
# explore sequence and execute when  
def exestep(self, seq):
    bseq = False
    if seq[1].tseq < 0:
        bseq = self.nextstep(seq)
    else:
        bseq = self.nextcheck(seq)
    if bseq:
        return True
    pseq = seq[0][seq[1].iseq]
    tnow = self.tomilli(time.time())
    tdel = self.tomilli(pseq[0])
    if seq[1].bexe == False:
        print('execute(%d):'% (tnow-self.chrono),pseq)
        # execute the selected function
        pseq[1](pseq[2],pseq[3],pseq[4])
        seq[1].bexe = True 
    tseq = seq[1].tseq
    if tnow > (tseq+tdel):
        bseq = self.nextstep(seq)
    return bseq
  

主循环功能,探索所有序列发生器,直到完成或   max_delay

#
# loop to execute all sequences with max_delay (s)
def execute(self, max_delay):
    print('start:',time.strftime("%H:%M:%S", time.localtime()))
    self.stop = False
    self.delay = self.tomilli(max_delay)
    self.chrono = self.tomilli(time.time())
    while self.stop == False:
        tnow = self.tomilli(time.time())
        #if tnow > (self.chrono + self.delay):
        #    break
        bstop = True
        for seq in self.list:
            bseq = self.exestep(seq)
            bstop = bstop & bseq
        if bstop == True:
            self.stop = True    
    print('stop:',time.strftime("%H:%M:%S", time.localtime()),
          ((tnow-self.chrono)/1000.0))

第3步 - 根据您声明的函数声明您的音序器

对于function1(),使用2步音序器:

def function1():
        pyautogui.click(button='left', x=619, y=266) 
        pyautogui.PAUSE = 3.9
        pyautogui.click(button='left', x=617, y=475)

音序器是:

fct1 = [
  # pyautogui.click(button='left', x=619, y=266) 
  [ 3.9, pyautogui.click, 'left', 619, 266 ],
  # pyautogui.click(button='left', x=617, y=475)
  [ 0.0, pyautogui.click, 'left', 617, 475 ]
]

第4步 - 创建TimerExec对象,添加音序器然后执行。

  

持续时间限制为最长13.6秒

tSeq = TimerExec()
tSeq.append(fct1)
tSeq.execute(13.6)