def create_donate_widget(button): w = QWidget() w.setLayout(QVBoxLayout()) w.layout().addWidget(button) if isosx: w.setStyleSheet('QWidget, QToolButton {background-color: none; border: none; }') w.layout().setContentsMargins(0,0,0,0) w.setContentsMargins(0,0,0,0) w.filler = QLabel(u'\u00a0') w.layout().addWidget(w.filler) return w
def create_donate_widget(button): w = QWidget() w.setLayout(QVBoxLayout()) w.layout().addWidget(button) if isosx: w.setStyleSheet( 'QWidget, QToolButton {background-color: none; border: none; }') w.layout().setContentsMargins(0, 0, 0, 0) w.setContentsMargins(0, 0, 0, 0) w.filler = QLabel(u'\u00a0') w.layout().addWidget(w.filler) return w
class TDockWidget(QDockWidget): def __init__(self, title="", parent=None, flags=Qt.WindowFlags(), bind_widget=None, close_slot=None, toggle_slot=None): QDockWidget.__init__(self, title, parent, flags) self.installEventFilter(self) self.main_win = parent # default stlyesheets for title bars self.title_stylesheet = "QWidget {background: rgb(68,68,68);}" self.button_style = "QPushButton:hover:!pressed {background: grey;}" from TigGUI.Images.ControlDialog import ImageControlDialog from TigGUI.Plot.SkyModelPlot import ToolDialog from TigGUI.Plot.SkyModelPlot import LiveImageZoom if bind_widget is not None: self.bind_widget = bind_widget if bind_widget is not None: if isinstance(bind_widget, ToolDialog): self.tdock_style = "ToolDialog {border: 1.5px solid rgb(68,68,68);}" elif isinstance(bind_widget, ImageControlDialog): self.tdock_style = "ImageControlDialog {border: 1.5px solid rgb(68,68,68);}" # set default sizes for QDockWidgets self.btn_w = 28 self.btn_h = 28 self.icon_size = QSize(20, 20) self.font_size = 8 # setup custom title bar for profiles dockable self.dock_title_bar = QWidget() self.dock_title_bar.setContentsMargins(0, 0, 0, 0) self.dock_title_bar.setStyleSheet(self.title_stylesheet) self.dock_title_bar.setBaseSize(0, 0) self.dock_title_layout = QHBoxLayout() self.dock_title_layout.setContentsMargins(0, 0, 0, 0) self.dock_title_layout.setSpacing(0) self.dock_title_bar.setLayout(self.dock_title_layout) # custom close button self.close_button = QPushButton() self.close_button.setStyleSheet(self.button_style) self.close_button.setMaximumWidth(self.btn_w) self.close_button.setMaximumHeight(self.btn_h) self.close_button.setContentsMargins(0, 0, 0, 0) self.close_button.setBaseSize(0, 0) self.close_icon = self.dock_title_bar.style().standardIcon(QStyle.SP_TitleBarCloseButton) self.close_button.setIcon(self.close_icon) self.close_button.setToolTip("Close") # custom toggle button self.toggle_button = QPushButton() self.toggle_button.setStyleSheet(self.button_style) self.toggle_button.setMaximumWidth(self.btn_w) self.toggle_button.setMaximumHeight(self.btn_h) self.toggle_button.setContentsMargins(0, 0, 0, 0) self.toggle_button.setBaseSize(0, 0) self.toggle_icon = self.dock_title_bar.style().standardIcon(QStyle.SP_TitleBarShadeButton) self.toggle_button.setIcon(self.toggle_icon) self.toggle_button.setToolTip("Dock/float widget") # tigger logo self.image0 = pixmaps.tigger_logo.pm() self.title_icon = QLabel() self.title_icon.setContentsMargins(0, 0, 0, 0) self.title_icon.setBaseSize(0, 0) self.title_icon.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.title_icon.setScaledContents(True) self.title_icon.setPixmap(self.image0) self.title_icon.setAlignment(Qt.AlignCenter) self.title_icon.setMaximumSize(self.icon_size) # set dock widget title self.title_font = QFont() self.title_font.setBold(True) self.title_font.setPointSize(self.font_size) if bind_widget is not None: if isinstance(bind_widget, ImageControlDialog): self.dock_title = QLabel(f"{title}: Control Dialog") else: self.dock_title = QLabel(title) self.dock_title.setFont(self.title_font) self.dock_title.setAlignment(Qt.AlignCenter) self.dock_title.setContentsMargins(0, 0, 0, 0) self.dock_title.setBaseSize(0, 0) self.dock_title.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum) # add dock widget title items to layout self.dock_title_layout.addWidget(self.title_icon) self.dock_title_layout.addWidget(self.dock_title) self.dock_title_layout.addWidget(self.toggle_button) self.dock_title_layout.addWidget(self.close_button) # set up profiles as dockable self.setStyleSheet(self.tdock_style) self.setWidget(bind_widget) self.setFeatures(QDockWidget.AllDockWidgetFeatures) if bind_widget is not None: if isinstance(bind_widget, ToolDialog): self.setAllowedAreas(Qt.AllDockWidgetAreas) elif isinstance(bind_widget, ImageControlDialog): self.setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea) self.setTitleBarWidget(self.dock_title_bar) self.setFloating(False) # get current sizeHints() if bind_widget is not None: self.setBaseSize(bind_widget.sizeHint()) if isinstance(bind_widget, LiveImageZoom): bind_widget.livezoom_resize_signal.connect(self._resizeDockWidget) if close_slot is not None: self.close_button.clicked.connect(close_slot) if toggle_slot is not None: self.toggle_button.clicked.connect(toggle_slot) def _resizeDockWidget(self, qsize): # live zoom signal slot to resize dockwidget and dock areas self.setMinimumSize(qsize) self.main_win.resizeDocks([self], [qsize.width()], Qt.Horizontal) self.main_win.resizeDocks([self], [qsize.height()], Qt.Vertical) # hack to stop QDockWidget responding to drag events for undocking - work around for Qt bug def eventFilter(self, source, event): # event seq 2, 5, 3 - mouse press, mouse move, mouse release if event.type() == QEvent.MouseButtonPress: label = self.childAt(event.pos()) if not label: return super(TDockWidget, self).eventFilter(source, event) if isinstance(label, QLabel): if not self.isFloating(): fake_mouse_event = QMouseEvent(QEvent.MouseButtonRelease, event.pos(), event.button(), event.buttons(), event.modifiers()) super(TDockWidget, self).event(fake_mouse_event) return True return super(TDockWidget, self).eventFilter(source, event)