Mon, 07 Apr 2025 18:36:12 +0200
Some enhancements to the EricAutoResizeTextBrowser widget.
10920
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
11090
f5f5f5803935
Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10920
diff
changeset
|
3 | # Copyright (c) 2024 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
10920
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a QTextBrowser widget that resizes automatically. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | from PyQt6.QtCore import Qt |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | from PyQt6.QtWidgets import QFrame, QSizePolicy, QTextBrowser |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | class EricAutoResizeTextBrowser(QTextBrowser): |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | Class implementing a QTextBrowser widget that adjusts its size automatically to the |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | contained text. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | def __init__(self, parent=None): |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | Constructor |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | @param parent reference to the parent widget (defaults to None) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | @type QWidget (optional) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | super().__init__(parent=parent) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) |
11210
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
30 | self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) |
10920
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | self.setFrameShape(QFrame.Shape.NoFrame) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | self.textChanged.connect(self.updateGeometry) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | def resizeEvent(self, evt): |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | Protected method to handle resize events. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | @param evt reference to the resize event |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | @type QResizeEvent |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | super().resizeEvent(evt) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | self.updateGeometry() |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | def updateGeometry(self): |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | Public method to update the geometry depending on the current text. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | """ |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | # Set the text width of the document to match the width of the text browser. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | self.document().setTextWidth( |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | self.width() - 2 * int(self.document().documentMargin()) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | ) |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | # Get the document height and set it as the fixed height of the text browser. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | docHeight = self.document().size().height() |
11210
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
57 | self.setFixedHeight(int(docHeight) + ( |
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
58 | self.horizontalScrollBar().height() |
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
59 | if self.horizontalScrollBar().isVisible() |
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
60 | else 0 |
dd70d72aac30
Some enhancements to the EricAutoResizeTextBrowser widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
61 | )) |
10920
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | # Call the base class updateGeometry() method. |
8a1d447323a2
Added a specialized QTextBrowser subclass that adjusts its size to the contained text automatically (no scrollbars shown).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | super().updateGeometry() |