PySide6 QMainWindow Toolbar Example

QMainWindow toolbar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# The QToolBar class provides a movable 
# panel that contains a set of controls.

import sys

from PySide6.QtCore import Qt
from PySide6.QtGui import QAction, QIcon
from PySide6.QtWidgets import (QApplication, QMainWindow,
    QTextEdit, QLabel, QMessageBox)


class QEditor(QMainWindow):
    
    def __init__(self):

        super().__init__()

        self.text_edit = QTextEdit()        
        self.setCentralWidget(self.text_edit)

        self.label = QLabel()
        self.statusBar().addWidget(self.label)
        
        self.text_edit.textChanged.connect(self.on_text_changed)
        
        menu_bar = self.menuBar()
        
        file_menu = menu_bar.addMenu('&File')
        
        # You can add icons to QActions.
        # Icons are shown both in the menu and in the toolbar.
        # The icons used here are from the Tango project.
        
        exit_action = QAction(self)
        exit_action.setText('&Exit')
        exit_action.setIcon(QIcon('./icons/exit.png'))
        exit_action.triggered.connect(QApplication.quit)
        
        file_menu.addAction(exit_action)
          
        help_menu = menu_bar.addMenu('&Help')
        
        about_action = QAction(self)
        about_action.setText('&About')
        about_action.setIcon(QIcon('./icons/about.png'))
        about_action.triggered.connect(self.show_messagebox)
        
        help_menu.addAction(about_action)
        
        # 1 - Create the toolbar
        
        file_toolbar = self.addToolBar('File')
        
        # 2 - Add actions to it. We reuse the same actions
        #     that we used for the menu.
        
        file_toolbar.addAction(exit_action)
        file_toolbar.addAction(about_action)
        
        # 3 - ... and that's about it. Here we just
        #     set the icons to be displayed besides the text.
        
        file_toolbar.setToolButtonStyle(
            Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
    
    def on_text_changed(self):
        
        cursor = self.text_edit.textCursor()
        
        size = len(self.text_edit.toPlainText())
        x = str(cursor.blockNumber() + 1)
        y = str(cursor.columnNumber() + 1)
        
        self.label.setText('Chars: {}, Ln: {}, Col: {}'.format(size, x, y))
        
    def show_messagebox(self):
        
        messagebox = QMessageBox()
        messagebox.setText('PyQt menu example')
        messagebox.exec()


if __name__ == '__main__':

    app = QApplication(sys.argv)

    editor = QEditor()
    editor.show()

    sys.exit(app.exec())

The QToolBar class represents an application toolbar. To use it in your application

  1. Create the toolbar using QMainWindow.addToolBar().

  2. Add QActions, QWidgets and separators to it. Note how we reuse the same QActions for both the toolbar and the menu. We also add icons to the actions and they appear both in the menu items and on the toolbar.