python不同文件调用全局变量-线程间通信也可以使用

1.问题

在做要给这样的项目,主程序是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)也尝试了键盘监听;

上面都可以运行,但就是在我的终端里面不能触发,可能哪里的小细节没注意到。

2. 方法

切入正题:

我这里最后用了全局变量来实现,看起来觉得全局变量很熟悉的概念,但是如果你的程序文件,有互相调用的情况,可能就会出问题,最后找到一个不错的思路,可以参考这里:

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()

你可能感兴趣的:(qt,Python,python,开发语言)