Is there a way to send messages for progression from a QWidget to a QStatusBar in PySide2?. A way to emit message when something happens and another object to receive it and change message accordingly.
I've been trying to solve the problem using QObject.emit() and QObject.connect() to pass the string and display on QStatusBar with no results, both of them are in different classes.
I have only used emit and connect for simple operations like closing child window along with the parent, so if emit and connect is not the right way to handle this please suggest another way to pass messages.
import os
import shutil
from PySide2 import QtWidgets
from PySide2.QtCore import SIGNAL, SLOT
class 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)
)
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.status_bar.showMessage(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()
widget_window = ParentWidget()