pythonpython-3.xpyqtpyqt5qstatusbar

PyQt5 StatusBar Separators


How do I add vertical separators to my statusbar?

(Red arrows) in this screenshot.

enter image description here

And if I success this how can I show selected Line and Column?

(Blue arrows) in same screenshot.

That's for windows.


Solution

  • void QStatusBar::addPermanentWidget(QWidget *widget, int stretch = 0)

    Adds the given widget permanently to this status bar, reparenting the widget if it isn't already a child of this QStatusBar object. The stretch parameter is used to compute a suitable size for the given widget as the status bar grows and shrinks. The default stretch factor is 0, i.e giving the widget a minimum of space.

    import sys
    from PyQt5.QtWidgets import (QApplication, QMainWindow, QStatusBar, QLabel, 
                                 QPushButton, QFrame)
    
    class VLine(QFrame):
        # a simple VLine, like the one you get from designer
        def __init__(self):
            super(VLine, self).__init__()
            self.setFrameShape(self.VLine|self.Sunken)
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            
            self.statusBar().showMessage("bla-bla bla")
            self.lbl1 = QLabel("Label: ")
            self.lbl1.setStyleSheet('border: 0; color:  blue;')
            self.lbl2 = QLabel("Data : ")
            self.lbl2.setStyleSheet('border: 0; color:  red;')
            ed = QPushButton('StatusBar text')
    
            self.statusBar().reformat()
            self.statusBar().setStyleSheet('border: 0; background-color: #FFF8DC;')
            self.statusBar().setStyleSheet("QStatusBar::item {border: none;}") 
            
            self.statusBar().addPermanentWidget(VLine())    # <---
            self.statusBar().addPermanentWidget(self.lbl1)
            self.statusBar().addPermanentWidget(VLine())    # <---
            self.statusBar().addPermanentWidget(self.lbl2)
            self.statusBar().addPermanentWidget(VLine())    # <---
            self.statusBar().addPermanentWidget(ed)
            self.statusBar().addPermanentWidget(VLine())    # <---
            
            self.lbl1.setText("Label: Hello")
            self.lbl2.setText("Data : 15-09-2019")
    
            ed.clicked.connect(lambda: self.statusBar().showMessage("Hello "))
            
            
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    

    enter image description here