Search code examples
pythonpython-3.xpyqtpyqt5

QToolBar does not show text next to icon


I have the following code:

from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon


class ConfigureBar(QtWidgets.QToolBar):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.addAction(QtWidgets.QIcon("some_icon.png"), "Hi")
        self.addSeparator()
        self.addAction(QIcon("some_icon.png"), "Hello")

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    window = ConfigureBar()

    window.show()
    app.exec()

But for some reason, the displayed widget does not have a text (Hi, Hello), only the icon. I tried to find some answer but I can't seem to get the keyword right. Help?


Solution

  • The toolButtonStyle property indicates the style of how the QToolButtons are shown, and by default it is Qt::ToolButtonIconOnly, so only show the icon, if you want to show the text you have to use Qt::ToolButtonTextBesideIcon or Qt::ToolButtonTextUnderIcon:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class ConfigureBar(QtWidgets.QToolBar):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
            # or
            # self.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
    
            self.addAction(QtGui.QIcon("some_icon.png"), "Hi")
            self.addSeparator()
            self.addAction(QtGui.QIcon("some_icon.png"), "Hello")
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
    
        toolbar = ConfigureBar()
    
        w = QtWidgets.QMainWindow()
        w.addToolBar(toolbar)
        w.show()
    
        sys.exit(app.exec_())