在做要给这样的项目,主程序是pyqt的界面,这里叫做main.py。 操作的对象是一个不断处理数据的线程,这个线程这里定为thread.py。 在main.py的一个函数(按键触发的事件)来触发线程。刚开始的思路是用按钮控件绑定一个键盘按键,然后线程py文件里面的有一个input(),只要检测到输入为”ss" 就触发。
work_thread()
while True:
a=input()
if a=="ss":
to do
希望通过ui上的按键来触发这个事件,通过各种方式都没有成功,这里尝试了
(1)pyqt自动的按键绑定键盘;
(2)也使用了pynput模拟键盘输入的库;
(3)也尝试了键盘监听;
上面都可以运行,但就是在我的终端里面不能触发,可能哪里的小细节没注意到。
切入正题:
我这里最后用了全局变量来实现,看起来觉得全局变量很熟悉的概念,但是如果你的程序文件,有互相调用的情况,可能就会出问题,最后找到一个不错的思路,可以参考这里:
python跨文件之全局变量 - 知乎
上核心代码
#global_var.py
# -*- coding: utf-8 -*-
def _init(): # 初始化
global _global_dict
_global_dict = {}
def set_value(key, value):
#定义一个全局变量
_global_dict[key] = value
def get_value(key):
#获得一个全局变量,不存在则提示读取对应变量失败
try:
return _global_dict[key]
except:
print('读取'+key+'失败\r\n')
# main.py
import threading
import thread1
import global_var #import
def clickButton(self):
sender = self.sender()
print(sender.text() + '按钮被点击')
global_var.set_value('det_flag', "True") #处理
btn_flag = global_var.get_value('det_flag') #处理
if __name__ == '__main__':
global_var._init() #初始化
global_var.set_value('det_flag', "False") #定义
#todo
####thread.py
import threading
import os
import time
import sys
import global_var
def work_thread():
while True:
btn_flag = global_var.get_value('det_flag') #读取触发信号
time.sleep(1)
if btn_flag=="True":
global_var.set_value('det_flag', "False") #重置触发信号
# mutex.acquire()
n+=1
time.sleep(0.2)
print("thread 1-2*****")
# mutex.release()