2016-09-08 5 views
0

Я еще не узнал, как увеличить значки в моем QMenu. Я попытался определить таблицу стилей, в которой увеличен размер значка. Но это не сработает. Вот мой код:Как сделать значок в QMenu больше (PyQt)?

menuStyleSheet = (""" 
     QMenu { 
      font-size: 18px; 
      color: black; 
      border: 2px solid black; 
      left: 20px; 
      background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1, stop: 0 #cccccc, stop: 1 #ffffff); 
     } 

     QMenu::item { 
      padding: 2px 20px 2px 30px; 
      border: 1px solid transparent; /* reserve space for selection border */ 
      spacing: 20px; 
      height: 60px; 
     } 

     QMenu::icon { 
      padding-left: 20px; 
      width: 50px;  /* <- unfortunately, doesn't work */ 
      height: 50px;  /* <- unfortunately, doesn't work */ 
     } 
    """) 

##################################################### 
#    THE PYQT APPLICATION    # 
##################################################### 
class GMainWindow(QMainWindow): 

    def __init__(self, title): 
     super(GMainWindow, self).__init__() 
      ... 

    def setCustomMenuBar(self): 
     myMenuBar = self.menuBar() 
     global menuStyleSheet 
     myMenuBar.setStyleSheet(menuStyleSheet) 
     # Now add Menus and QActions to myMenuBar.. 

Результат этого код выглядит следующим образом:

enter image description here

Я знаю, что есть старый StackOverflow вопрос о подобной теме, но предполагается, что один является кодирование приложения Qt в C++. Так что ситуация другая. Вот ссылка: How to make Qt icon (in menu bar and tool bar) larger?

Любая помощь очень ценится :-)

EDIT:

Вот некоторые подробности о моей машине:

  • ОС: Windows 10
  • Python: v3 (пакет Anaconda)
  • Qt: PyQt5
+0

Что делать, если вы создаете 'QStyleOptionMenuItem' и установить переменную' maxIconWidth'? – deW1

ответ

1

После долгого поиска я наконец нашел решение. Просто скопируйте приведенный ниже код и вставьте его в файл *.py. Конечно, вы должны заменить путь к значку допустимым путем на вашем локальном компьютере. Просто укажите полный путь («C: \ ..»), чтобы убедиться, что Qt находит рисунок значка.

import sys 
import os 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 

# Create a custom "QProxyStyle" to enlarge the QMenu icons 
#----------------------------------------------------------- 
class MyProxyStyle(QProxyStyle): 
    pass 
    def pixelMetric(self, QStyle_PixelMetric, option=None, widget=None): 

     if QStyle_PixelMetric == QStyle.PM_SmallIconSize: 
      return 40 
     else: 
      return QProxyStyle.pixelMetric(self, QStyle_PixelMetric, option, widget) 


# This is the main window class (with a simple QMenu implemented) 
# ------------------------------------------------------------------ 
class TestWindow(QMainWindow): 
    def __init__(self): 
     super(TestWindow, self).__init__() 

     # 1. Set basic geometry and color. 
     self.setGeometry(100, 100, 400, 400) 
     self.setWindowTitle('Hello World') 
     palette = QPalette() 
     palette.setColor(QPalette.Window, QColor(200, 200, 200)) 
     self.setPalette(palette) 

     # 2. Create the central frame. 
     self.centralFrame = QFrame() 
     self.centralFrame.setFrameShape(QFrame.NoFrame) 
     self.setCentralWidget(self.centralFrame) 

     # 3. Create a menu bar. 
     myMenuBar = self.menuBar() 
     fileMenu = myMenuBar.addMenu("&File") 

     testMenuItem = QAction(QIcon("C:\\my\\path\\myFig.png"), "&Test", self) 
     testMenuItem.setStatusTip("Test for icon size") 
     testMenuItem.triggered.connect(lambda: print("Menu item has been clicked!")) 

     fileMenu.addAction(testMenuItem) 

     # 4. Show the window. 
     self.show() 

# Start your Qt application based on the new style 
#--------------------------------------------------- 
if __name__== '__main__': 
    app = QApplication(sys.argv) 
    myStyle = MyProxyStyle('Fusion') # The proxy style should be based on an existing style, 
             # like 'Windows', 'Motif', 'Plastique', 'Fusion', ... 
    app.setStyle(myStyle) 

    myGUI = TestWindow() 

    sys.exit(app.exec_()) 

Вы увидите окно, как это, с огромной иконой: enter image description here

Так как же я решить эту проблему? Ну, видимо, вы не можете увеличить размер значка элемента QMenu обычным способом - определяя размер в таблице стилей. Единственный способ сделать это - предоставить новый QStyle, предпочтительно полученный из существующего QStyle. Я нашел источники о том, как это сделать в C++ (см. http://www.qtcentre.org/threads/21187-QMenu-always-displays-icons-aty-16x16-px), но никаких объяснений для PyQt.
После долгих проб и ошибок, я получил это работает :-)

Видимо больше людей бороться с этой ситуацией: http://www.qtcentre.org/threads/61860-QMenu-Icon-Scale-in-PyQt

Смежные вопросы