根据反馈的意见,做出一个界面版可以设置采集周期、文件保存位置、截图次数、截图倒计时、剩余空间统计的工具。
头一次做pyqt的界面应用。主要难点在于多线程的使用,以及界面线程与运行逻辑线程间的通讯。界面向截图线程发送开始/停止信号、触发间隔、截图位置、是否自动开启;截图线程向界面发送截图数目、倒计时。
以下把截图线程代码晒出来。具体代码待打包。
class WorkThread(QThread):
trigger = pyqtSignal(int, str)
trigger_next_grab_time = pyqtSignal(int)
def __init__(self, parent=None):
super(WorkThread, self).__init__()
self.filename = ""
self.inter_time = 10
self.auto_open = False
self.run_or_stop = False
# 定义槽函数,获取文件存储位置、循环间隔、是否运行、是否自动打开
def set_filename(self, text):
self.filename = text
def set_interval_time(self, interval_time):
self.inter_time = int(interval_time)
def set_auto_open(self, auto_open):
self.auto_open = bool(auto_open)
def run_stop(self, run_or_stop):
self.run_or_stop = bool(run_or_stop)
# 在线程中执行定时截图功能
def run(self):
global count
while True:
if self.run_or_stop:
count += 1
pic = ImageGrab.grab()
name = time.strftime("%Y-%m-%d---%H:%M:%S", time.localtime()).replace(':', '-')
place = self.filename + "/"
pic.save(r'%s%s.jpg' % (place, name))
# 写入日志
with open("grab_screen_log.txt", "a") as f:
f.write("截图%s.jpg成功!\r\n" % name)
# 执行倒计时函数
self.trans_next_grub_time_and_sleep(self.inter_time)
log = '截图 {0}.jpg成功!\r\n'.format(name)
# 发出信号,传递参数:运行次数count及log内容
self.trigger.emit(count, log)
def trans_next_grub_time_and_sleep(self, times):
# 设置下次抓取的倒计时,并向主界面传递
for i in range(times, 0, -1):
time.sleep(1)
self.trigger_next_grab_time.emit(i)
print(i)