PYQT的多窗口之间数据的传递

问题由来:我们在进行开发的过程中,会遇见窗口跳转的功能,此时由于业务需要,可能需要将主窗口中的数据,与子窗口进行通信。

举例:开发了一个文本识别(也可以是YOLO系列,原理类似)训练的QT程序。此时,当我们可视化识别之后,如果发现我们的识别结果有误,则会将此图片以及预测结果保存,然后跳转到数据标注的窗口重新标注。那么,容易想到两个问题:

  • 1.跳转到新的数据标注窗口之后,怎么获取识别错误图片的文件夹
  • 2.跳转到新的数据标注窗口之后,怎么获取之前在识别窗口的文字预测结果,并直接在数据标注窗口进行修改。
def button_text_re_tag(self):
    self.flag_reTag = True
    # 断开原来的槽函数,改变原有的功能:
    # 将此图片放进一个新的文件夹,然后重新产看标注信息
    # 获取当前识别图片的路径
    img_name = self.recog_list[self.index - 1]
    print(img_name)
    current_file_dir = os.path.dirname(img_name)
    print(current_file_dir)
    new_biaozhu_file_name = os.path.join(current_file_dir, "rebuilt_biaozhu")
    if not os.path.exists(new_biaozhu_file_name):
        os.makedirs(new_biaozhu_file_name)
    # 将当前的图片放在新的文件,同时,进行下一页的操作;
    # 当前的索引是self.index - 1
    # 还要删除当前列表中索引对应的元素
	shutil.move(self.recog_list[self.index - 1], new_biaozhu_file_name)
	# print(self.recog_list)
	# print(self.recog_list[0])
	# print(self.recog_list[1])
	# 注意pop的用法,是动态的
	self.recog_list.pop(self.index - 1)
	self.recog_list.pop(self.index - 1)
	
	self.tagList.append(new_biaozhu_file_name)
	self.tagList.append(self.flag_reTag)
	self.tagList.append(self.recog_list[self.index])
	
	self.tagList = list(OrderedDict.fromkeys(self.tagList))
	
	self.show_img(self.index)

其中:tagList是一个用于存储两个窗口之间传递信息的列表,我们需要使用信号机制

def button_arrive_data_window(self):
    from data_itemwindow import Ui_Form
    self.data_item_window = Ui_Form()
    self.data_item_window.show()
    # 打开数据标注的页面,此时默认的打开现在加入到重新标注文件夹中的图片

    self.signal_reTag_list.emit(self.tagList)

这里的signal_reTag_list需要在类中定义:

class  Recog_MainWindow(QtWidgets.QMainWindow):
    signal_reTag_list = QtCore.pyqtSignal(list)
    def __init__(self, parent=None):
        super(Recog_MainWindow, self).__init__(parent)
        self.timer_video = QtCore.QTimer()
        # 线程的定义需要放在这里,不能时局部变量.参考https://cloud.tencent.com/developer/article/2085738
        self.thread = None
        self.index = None
        self.img = None

接下来就是接受数据:在我们的另一个窗口data_item_window中connect:

def init_slots(self):
    self.pushButton_to_tag.clicked.connect(lambda: self.data_item_window.getInfo_from_reTag(self.tagList))

其中getInfo_from_reTag()方法为具体接受信号的方法:

def getInfo_from_reTag(self, list):
    self.re_tag_list = list
    print(list)
    self.img_file_name = self.re_tag_list[0]
    self.GetImgPathlineEdit.setText(str(self.re_tag_list[0]))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值