【问题标题】:How to in PySide/PyQt, zooming in and out UI如何在 PySide/PyQt 中,放大和缩小 UI
【发布时间】:2019-02-13 22:35:55
【问题描述】:

我偶尔会在 Maya 中练习 PySide,现在我想要一个 UI,它会在不同的缩放范围内表现不同。 基本上,当我放大某个范围时,我想看到一种类型的按钮,当我缩小时,又想看到不同的按钮。有人知道我可以查看哪种布局或一些示例吗?谢谢。

【问题讨论】:

    标签: python pyqt pyside maya


    【解决方案1】:

    对于缩放,我有一个自定义 QGraphicsView,如下所示:

    from PyQt5.QtWidgets import QGraphicsView, QSizePolicy
    
    
    class GraphicsView(QGraphicsView):
    
        def __init__(self):
            super(GraphicsView, self).__init__()
            # Graphics view variables
            self.start = None
            self.end = None
            self.box_list = list()
            self.__zoom = 0
            self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
    
        def wheelEvent(self, event):
            if event.angleDelta().y() > 0:
                factor = 1.25
                self.__zoom += 1
            else:
                factor = 0.8
            if self.__zoom > 0:
                self.scale(factor, factor)
            elif self.__zoom == 0:
                # self.fitInView()
                pass
            else:
                self.__zoom = 0
    

    基于此,您可以拥有一个 pysignal 并在某些 self.__zoom 级别上进行发射,从而允许您将该信号连接到负责更改工具栏或任何您需要的任何方法的方法。

    例如:

    from PyQt5.QtWidgets import QGraphicsView, QSizePolicy
    from PyQt5.QtCore import pyqtSignal
    
    class GraphicsView(QGraphicsView):
    
        zoom_signal = pyqtSignal(bool)
    
        def __init__(self):
            super(GraphicsView, self).__init__()
            # Graphics view variables
            self.start = None
            self.end = None
            self.box_list = list()
            self.__zoom = 0
            self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
    
        def wheelEvent(self, event):
            if event.angleDelta().y() > 0:
                factor = 1.25
                self.__zoom += 1
            else:
                factor = 0.8
            if self.__zoom > 0:
                self.scale(factor, factor)
            if self.__zoom > 10:
                self.zoom_signal.emit(True)
            elif self.__zoom < 10:
                self.zoom_signal.emit(False)
            else:
                self.__zoom = 0
    

    这可能无法满足您的需求,但这个概念已经存在并且可以修改为您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      相关资源
      最近更新 更多