为了账号安全,请及时绑定邮箱和手机立即绑定

如何将消息从 QWidget 发送到 QStatusBar?

如何将消息从 QWidget 发送到 QStatusBar?

交互式爱情 2022-06-22 20:38:01
有没有办法在 PySide2 中将消息从 QWidget 发送到 QStatusBar?一种在发生某事时发出消息的方法,另一个对象接收它并相应地更改消息。我一直在尝试使用 QObject.emit() 和 QObject.connect() 来传递字符串并在 QStatusBar 上显示但没有结果,它们都在不同的类中。我只将 emit 和 connect 用于简单的操作,比如与父窗口一起关闭子窗口,所以如果 emit 和 connect 不是处理这个问题的正确方法,请建议另一种传递消息的方法。import osimport shutilfrom PySide2 import QtWidgetsfrom PySide2.QtCore import SIGNAL, SLOTclass ChildWidget(QtWidgets.QWidget):    def __init__(self, parent=None):        super(ChildWidget, self).__init__(parent)        self.initUI()    def initUI(self):        self.setLayout(QtWidgets.QGridLayout())        label_A = QtWidgets.QLabel("Path A: ", self)        self.text_A = QtWidgets.QLineEdit(self)        label_B = QtWidgets.QLabel("Path B: ", self)        self.text_B = QtWidgets.QLineEdit(self)        button_A = QtWidgets.QPushButton("Copy", self)        button_A.clicked.connect(self.copy_function)        self.layout().addWidget(label_A, 0, 0)        self.layout().addWidget(self.text_A, 0, 1)        self.layout().addWidget(label_B, 1, 0)        self.layout().addWidget(self.text_B, 1, 1)        self.layout().addWidget(button_A, 1, 2)        self.layout().setColumnStretch(1, 1)        self.layout().setColumnMinimumWidth(2, 72)    def copy_function(self):        source = self.text_A.text()        destination = self.text_B.text()        self.message = ''; count = 0        file_list = os.listdir(source)        for item in file_list:            count = count + 1            source_path = source +'/'+ item            destination_path = destination +'/'+ item            if os.path.isfile(source_path):                shutil.copyfile(source_path, destination_path)            # message            self.message = 'Transferred {0} out of {1} files...'.format(                count, len(file_list)            )
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

我在 PyQt 文档之一中找到了它。这行得通。


import os

import shutil


from PySide2 import QtWidgets

from PySide2.QtCore import Signal, Slot


class ChildWidget(QtWidgets.QWidget):

    status_update = Signal(str)

    def __init__(self, parent=None):

        super(ChildWidget, self).__init__(parent)

        self.initUI()


    def initUI(self):

        self.setLayout(QtWidgets.QGridLayout())

        label_A = QtWidgets.QLabel("Path A: ", self)

        self.text_A = QtWidgets.QLineEdit(self)

        label_B = QtWidgets.QLabel("Path B: ", self)

        self.text_B = QtWidgets.QLineEdit(self)

        button_A = QtWidgets.QPushButton("Copy", self)


        button_A.clicked.connect(self.copy_function)


        self.layout().addWidget(label_A, 0, 0)

        self.layout().addWidget(self.text_A, 0, 1)

        self.layout().addWidget(label_B, 1, 0)

        self.layout().addWidget(self.text_B, 1, 1)

        self.layout().addWidget(button_A, 1, 2)


        self.layout().setColumnStretch(1, 1)

        self.layout().setColumnMinimumWidth(2, 72)


    def copy_function(self):

        source = self.text_A.text()

        destination = self.text_B.text()

        count = 0


        file_list = os.listdir(source)

        for item in file_list:

            count = count + 1

            source_path = source +'/'+ item

            destination_path = destination +'/'+ item

            if os.path.isfile(source_path):

                shutil.copyfile(source_path, destination_path)

            message = 'Transferred {0} out of {1} files...'.format(

                count, len(file_list)

            )

            self.status_update.emit(message)


class ParentWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):

        super(ParentWidget, self).__init__(parent)

        self.initUI()


    def initUI(self):

        self.child = ChildWidget()

        self.setLayout(QtWidgets.QGridLayout())

        self.status_bar = QtWidgets.QStatusBar(self)

        self.status_bar.setSizeGripEnabled(False)

        self.h_line = QtWidgets.QFrame(self)

        self.h_line.setFrameShape(self.h_line.HLine)

        self.h_line.setFrameShadow(self.h_line.Sunken)


        self.child.status_update.connect(self.status_message)


        self.layout().addWidget(self.child, 0, 0)

        self.layout().addWidget(self.h_line, 1, 0)

        self.layout().addWidget(self.status_bar, 2, 0)

        self.layout().setContentsMargins(0, 0, 0, 0)


        self.setWindowTitle("Copy Window")

        self.resize(600, 60)

        self.show()


    @Slot()

    def status_message(self, message):

        self.status_bar.showMessage(message)


widget_window = ParentWidget()


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号