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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值