Quellcode durchsuchen

Make all toolbar buttons the same size

To achieve this QToolBar and QToolButton subclasses are used, the latter
with a custom minimum size hint, set to the size of the biggest button.
Michael Pitidis vor 13 Jahren
Ursprung
Commit
ab33b81381
2 geänderte Dateien mit 42 neuen und 8 gelöschten Zeilen
  1. 9 8
      labelme.py
  2. 33 0
      toolBar.py

+ 9 - 8
labelme.py

@@ -19,6 +19,7 @@ from canvas import Canvas
 from zoomWidget import ZoomWidget
 from labelDialog import LabelDialog
 from labelFile import LabelFile
+from toolBar import ToolBar
 
 
 __appname__ = 'labelme'
@@ -42,12 +43,10 @@ class WindowMixin(object):
         return menu
 
     def toolbar(self, title, actions=None):
-        toolbar = QToolBar(title)
+        toolbar = ToolBar(title)
         toolbar.setObjectName(u'%sToolBar' % title)
         #toolbar.setOrientation(Qt.Vertical)
-        toolbar.setContentsMargins(0,0,0,0)
         toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
-        toolbar.layout().setContentsMargins(0,0,0,0)
         if actions:
             addActions(toolbar, actions)
         self.addToolBar(Qt.LeftToolBarArea, toolbar)
@@ -59,7 +58,8 @@ class MainWindow(QMainWindow, WindowMixin):
         super(MainWindow, self).__init__()
         self.setWindowTitle(__appname__)
 
-        self.setContentsMargins(0, 0, 0, 0)
+        # Not sure this does anything really.
+        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
 
         # Main widgets.
         self.label = LabelDialog(parent=self)
@@ -141,13 +141,14 @@ class MainWindow(QMainWindow, WindowMixin):
                 view=self.menu('&View'))
         addActions(self.menus.file, (open, save, quit))
         addActions(self.menus.edit, (label, color, fit_window))
-
         addActions(self.menus.view, (labels,))
 
         self.tools = self.toolbar('Tools')
-        addActions(self.tools, (open, save, color, labels, None, label, delete, hide, None,
-            zoom, fit_window, None, quit))
-
+        addActions(self.tools, (
+            open, save, None,
+            label, delete, color, hide, None,
+            zoom, fit_window, None,
+            quit))
 
         self.statusBar().showMessage('%s started.' % __appname__)
         self.statusBar().show()

+ 33 - 0
toolBar.py

@@ -0,0 +1,33 @@
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class ToolBar(QToolBar):
+    def __init__(self, title):
+        super(ToolBar, self).__init__(title)
+        layout = self.layout()
+        m = (0, 0, 0, 0)
+        layout.setSpacing(0)
+        layout.setContentsMargins(*m)
+        self.setContentsMargins(*m)
+        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
+
+    def addAction(self, action):
+        if isinstance(action, QWidgetAction):
+            return super(ToolBar, self).addAction(action)
+        btn = ToolButton()
+        btn.setDefaultAction(action)
+        btn.setToolButtonStyle(self.toolButtonStyle())
+        self.addWidget(btn)
+
+
+class ToolButton(QToolButton):
+    """ToolBar companion class which ensures all buttons have the same size."""
+    minSize = (60, 60)
+    def minimumSizeHint(self):
+        ms = super(ToolButton, self).minimumSizeHint()
+        w1, h1 = ms.width(), ms.height()
+        w2, h2 = self.minSize
+        ToolButton.minSize = max(w1, w2), max(h1, h2)
+        return QSize(*ToolButton.minSize)
+