Как управлять размещением элементов в QToolBar?
Я создал боковой toolbar с левой стороны окна приложения.
Добавил туда различные actions. И хотел в самом конце (внизу) добавить изображение .svg.
Отрендерил изображение, добавил в toolbar, и он, как и ожидалось добавился сразу после последнего action.
После этого попытался сдвинуть изображение в низ, но все тщетно. Изображение не реагирует на setGeometry() и у него нет метода setAlignment().
Единственное, что мне удалось, это сделать resize(), к счастью, он работает.
Вот так я реализовал само изображение:
class SvgWidget(QSvgWidget):
def __init__(self):
super().__init__()
self.text = open('logo.svg', 'r')
self.svg_render = QSvgRenderer(QXmlStreamReader(self.text.read()))
self.resize(50, 50)
def paintEvent(self, event) -> None:
qp = QPainter(self)
self.svg_render.render(qp)
Я создаю экземпляр этого класса в классе MainWindow:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("2D Map")
self.resize(800, 600)
self.widget = QWidget()
self.setCentralWidget(self.widget)
self.box = QVBoxLayout(self.widget)
self.box.setContentsMargins(30, 30, 30, 30)
self.testAction = QAction(QIcon('imgs/exit.png'), 'Exit', self)
self.testAction.triggered.connect(app.quit)
self.toolbar = self.addToolBar('Exit')
self.toolbar.setObjectName('toolbar')
self.addToolBar(Qt.ToolBarArea.LeftToolBarArea, self.toolbar)
self.toolbar.setMovable(False)
self.toolbar.addAction(self.testAction)
# вот здесь:
self.svg = SvgWidget()
self.toolbar.addWidget(self.svg)
self.svg.setFixedSize(70, 60)
Есть ли какой нибудь способ прижать его к нижней части окна в тулбаре?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант:
import sys
from PyQt5.Qt import *
class SvgWidget(QSvgWidget):
def __init__(self):
super().__init__()
# установите свое ------> vvvvvvvvvvvvvvvvv
self.text = open('radio_checked.svg', 'r')
self.svg_render = QSvgRenderer(QXmlStreamReader(self.text.read()))
self.resize(50, 50)
def paintEvent(self, event) -> None:
qp = QPainter(self)
self.svg_render.render(qp)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("2D Map")
self.widget = QWidget()
self.setCentralWidget(self.widget)
self.box = QHBoxLayout(self.widget)
self.box.setContentsMargins(30, 30, 30, 30)
videoAction = QAction(QIcon('im.png'), 'Play Video', self) # +
musicAction = QAction(QIcon('Ok.png'), 'Play Song', self) # +
# установите свое ---------------------> vvvvvvvvv
self.testAction = QAction(QIcon('exit_.png'), 'Exit', self)
self.testAction.triggered.connect(app.quit)
self.toolbar = self.addToolBar('Exit')
self.toolbar.setObjectName('toolbar')
self.addToolBar(Qt.ToolBarArea.LeftToolBarArea, self.toolbar)
self.toolbar.setMovable(False)
self.toolbar.addAction(videoAction) # +
self.toolbar.addAction(musicAction) # +
self.toolbar.addAction(self.testAction)
# вот здесь:
self.svg = SvgWidget()
# self.toolbar.addWidget(self.svg)
self.svg.setFixedSize(50, 50)
left_spacer = QWidget() # +++
self.left_layout = QVBoxLayout(left_spacer) # +++
right_spacer = QFrame() # +
self.right_layout = QVBoxLayout(right_spacer) # +
right_spacer.setStyleSheet('background-color: #D98C00;') # +
self.left_layout.addWidget(self.toolbar) # +++
self.left_layout.addWidget(self.svg) # +++
self.box.addWidget(left_spacer, 0) # +++
self.box.addWidget(right_spacer, 1) # +++
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.resize(800, 600)
window.show()
sys.exit(app.exec_())
