pyqt中窗口间的数据传递

本例介绍

产生要传递数据的窗口即为子窗口,接收数据的窗口为主窗口
本例中CustomMessageBox为子窗口,FolderFileUi为主窗口

实现功能

通过子窗口中输入的文本,改变主窗口中的标签内容

操作方式

鼠标右键点击标签,在弹出的菜单选择重命名,弹出子窗口。在窗口中输入新的标签名,点击确定即可完成更新

自定义信号

pyqt中,用自定义信号的方式在窗口间传递数据主要有4步

1、在子窗口的__init__之前定义自定义信号,传递参数类型根据实际需要定义,一定要在构造函数前定义!

class CustomMessageBox(QWidget):
    signal_def = pyqtSignal(str)  # 定义自定义信号,传递一个str参数,也可以是其他类型

    def __init__(self):

2、在子窗口中发送信号

def enter_name(self):
    text = self.lineEdit.text()
    self.signal_def.emit(str(text))
    self.close()

3、主窗口中实例化子类,绑定自定义信号和槽函数

self.w = CustomMessageBox()
self.w.show()
# 绑定自定义信号到deal_emit_dir_slot函数,deal_emit_dir_slot函数用于接收信号后的操作
self.w.signal_def.connect(self.deal_emit_dir_slot)

4、主窗口编写槽函数,接收子窗口传递过来的数据,槽函数记得定义一个参数,用来接收子窗口传过来的数据

def deal_emit_dir_slot(self, text):
    # 把标签名更新为子窗口传递过来的text
    self.folds_name_label.setText(text)
    self.folds_name_label.update()
    self.folds_name_label.adjustSize()

完整代码

import sys

from PyQt5.Qt import pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QMenu, QAction


class CustomMessageBox(QWidget):
    signal_def = pyqtSignal(str)  # 定义自定义信号,传递一个str参数,也可以是其他类型

    def __init__(self):
        super().__init__()
        self.setWindowTitle("名字修改")
        self.resize(240, 130)
        self.lineEdit = QLineEdit(self)
        self.lineEdit.setPlaceholderText('输入内容')
        self.lineEdit.setGeometry(20, 10, 200, 30)
        self.button = QPushButton('确定', self)
        self.button.move(20, 50)
        self.button.clicked.connect(self.enter_name)
        self.quit = QPushButton('取消', self)
        self.quit.move(145, 50)
        self.quit.clicked.connect(self.quit_win)

    def enter_name(self):
        text = self.lineEdit.text()
        self.signal_def.emit(str(text))
        self.close()

    def quit_win(self):
        self.close()


class FolderFileUi(QWidget):
    def __init__(self):
        super().__init__()
        # file_type:1代表文件夹,0代表文件
        self.resize(300, 200)
        self.folds_name_label = QLabel("测试标签", self)
        self.folds_name_label.move(100, 30)

    def contextMenuEvent(self, evt) -> None:
        menu = QMenu(parent=self)
        rename = QAction('重命名')
        rename.triggered.connect(self.rename_fun)
        del_btn = QAction('删除')
        del_btn.triggered.connect(self.del_fun)
        menu.addAction(rename)
        menu.addAction(del_btn)
        menu.exec(evt.globalPos())

    def rename_fun(self):
        # 实例化子窗口
        self.w = CustomMessageBox()
        self.w.show()
        # 绑定自定义信号到deal_emit_dir_slot函数,deal_emit_dir_slot函数用于接收信号后的操作
        self.w.signal_def.connect(self.deal_emit_dir_slot)

    def deal_emit_dir_slot(self, text):
        # 把标签名更新为子窗口传递过来的text
        self.folds_name_label.setText(text)
        self.folds_name_label.update()
        self.folds_name_label.adjustSize()

    def del_fun(self):
        self.folds_image_label.deleteLater()
        self.folds_name_label.deleteLater()
        self.deleteLater()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    demo = FolderFileUi()
    demo.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立秋6789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值