如何放大 PySide/PyQt、放大和缩小 UI
How to in PySide/PyQt, zooming in and out UI
我偶尔在 Maya 中练习 PySide,现在我想要 UI,它会在不同的缩放范围内发挥不同的作用。
基本上,当我放大某个范围时,我希望看到一种类型的按钮,当我缩小时,又会看到不同的按钮。有人知道我可以查看哪种布局或一些示例吗?谢谢。
为了缩放,我有一个自定义 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
这可能无法满足您的需求,但概念是存在的,可以修改以执行您想要的操作。
我偶尔在 Maya 中练习 PySide,现在我想要 UI,它会在不同的缩放范围内发挥不同的作用。 基本上,当我放大某个范围时,我希望看到一种类型的按钮,当我缩小时,又会看到不同的按钮。有人知道我可以查看哪种布局或一些示例吗?谢谢。
为了缩放,我有一个自定义 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
这可能无法满足您的需求,但概念是存在的,可以修改以执行您想要的操作。