Source code for pyleecan.GUI.Tools.SidebarWindow
import sys
from PySide2 import QtWidgets, QtGui, QtCore
"""
def _setColor(widget):
widget.setAutoFillBackground(True)
p = widget.palette()
p.setColor(widget.backgroundRole(), QtCore.Qt.red)
widget.setPalette(p)
"""
[docs]class SidebarWindow(QtWidgets.QMainWindow):
def __init__(self):
# === App-Init ===
super(SidebarWindow, self).__init__()
self._title = "Pyleecan"
self.setWindowTitle(self._title)
self._main = QtWidgets.QWidget()
self.setCentralWidget(self._main)
# === Main Widgets ===
# Navigation Panel with Button Group
self.nav_panel = QtWidgets.QFrame()
self.nav_btn_grp = QtWidgets.QButtonGroup()
self.nav_btn_grp.setExclusive(True)
self.nav_btn_grp.buttonClicked[int].connect(self.switch_stack)
self.btn_grp_fct = []
self.nav_layout = QtWidgets.QVBoxLayout(self.nav_panel)
self.nav_layout.setContentsMargins(2, 2, 2, 2)
self.nav_layout.addStretch(1) # add stretch first
# Sub Window Stack
self.io_stack = QtWidgets.QStackedWidget(self)
# Seperator Line
line = QtWidgets.QFrame()
line.setStyleSheet("QFrame { background-color: rgb(200, 200, 200) }")
line.setFixedWidth(2)
# === Main Layout ===
main_layout = QtWidgets.QHBoxLayout()
main_layout.addWidget(self.nav_panel)
main_layout.addWidget(line)
main_layout.addWidget(self.io_stack)
self._main.setLayout(main_layout)
self.show()
self.centerOnScreen()
[docs] def switch_stack(self, btn):
# print('Button Nbr. %2d pressed' % btn)
self.io_stack.setCurrentIndex(btn) # set stack
if self.btn_grp_fct[btn] is not None: # execute user function
self.btn_grp_fct[btn]()
[docs] def centerOnScreen(self):
"""centerOnScreen() - Centers the window on the screen."""
resolution = QtWidgets.QDesktopWidget().screenGeometry()
frame = self.frameSize()
self.move(
(resolution.width() / 2) - (frame.width() / 2),
(resolution.height() / 2) - (frame.height() / 2),
)
[docs] def addSubWindow(self, name, widget, btn_fct=None):
"""add a new sub window to the stack including the coresponding button"""
# Button
btn = QtWidgets.QPushButton(name)
btn.setFixedSize(100, 40)
btn.setCheckable(True)
self.nav_btn_grp.addButton(btn, self.io_stack.count())
self.nav_layout.insertWidget(self.io_stack.count(), btn)
self.btn_grp_fct.insert(self.io_stack.count(), btn_fct)
# Stack
self.io_stack.addWidget(widget)
[docs] def eventFilter(self, obj, event):
"""
Event Filter to disable 'Esc'-Key in a Widgets.
To install eventFilter on a Widget:
widget.installEventFilter(instance_of_main_window)
"""
if event.type() == QtCore.QEvent.KeyPress:
if event.key() in (QtCore.Qt.Key_Escape,):
return True
return super(SidebarWindow, self).eventFilter(obj, event)
[docs] def closeEvent(self, event):
"""Overload the methode to call DesignWidget.closeEvent"""
self.DesignWidget.closeEvent(event)