如何为PyQt安装新的QStyle?

时间:2016-07-01 22:41:41

标签: python python-3.x pyqt pyqt4 pyqt5

我正在PyQt4编写一个GUI(并迁移到PyQt5)。这就是我启动GUI的方式:

if __name__== '__main__':
    app = QApplication(sys.argv)
    QApplication.setStyle(QStyleFactory.create('Fusion')) # <- Choose the style
    myGUI = MyMainWindow("First GUI")
    app.exec_()

PyQt4中的默认样式:

显然,PyQt4具有以下样式:

  • 'Windows'
  • 'WindowsXP'
  • 'WindowsVista'
  • 'Motif'
  • 'CDE'
  • 'Plastique'
  • 'Cleanlooks'

PyQt5中的默认样式:

PyQt5具有以下样式:

  • 'Windows'
  • 'WindowsXP'
  • 'WindowsVista'
  • 'Fusion'

自定义样式?

这些样式都没有适当支持HiDpi显示器(4k等)。例如,滚动条太小(请参阅此帖子:How to resize the scrollbar from a QTextEdit in PyQt?)。我甚至没有提到那些视力不好的人的问题。

您是否知道为4k显示器或有视力问题的人提供良好支持的风格(最好是开源)?

如果是这样,如何下载此样式并安装它?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

我通过另一个问题得到了答案(或让我们说一个解决方法): How to make Icon in QMenu larger (PyQt)?

创建新QStyle的最简单方法是从现有的QProxyStyle派生它。 PyQt为此提供了QStyle类。以下是我在How to make Icon in QMenu larger (PyQt)?问题中给出的示例。在此示例中,创建了自定义QMenu(源自&#34; Fusion&#34;样式),自定义样式为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_()) 提供了非常大的图标。

DefaultFeatureCollection features = new DefaultFeatureCollection("your_id",type);

只需复制粘贴代码段,然后将其粘贴到* .py文件中即可。当然,您应该使用本地计算机上的有效路径替换图标的路径。只需提供一个完整的路径(&#34; C:..&#34;)就可以100%确定Qt找到了图标。

尝试一下,你应该得到以下窗口:

enter image description here