[英]How to in PySide/PyQt, zooming in and out UI
I am once in a while practicing PySide in Maya and right now I want to have UI which will act differently with different zoom range. 我不时在Maya中练习PySide,现在我想拥有UI,它将在不同的缩放范围下表现不同。 Basically, when I zoom in on certain range I would like to see one type of buttons , when I zoom out , again different buttons.
基本上,当我在特定范围内放大时,我希望看到一种按钮,当我缩小时,又会看到不同的按钮。 Anybody knows which layout I can look into or some examples?
有人知道我可以研究哪种布局或一些示例吗? Thank you.
谢谢。
For zooming I have a Custom QGraphicsView that looks like: 为了缩放,我有一个自定义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
Based on that you could have a pysignal and do an emit at certain self.__zoom levels allowing you to connect that signal to a method that would be responsible for changing a tool bar or whatever your needs are. 基于此,您可能会有一个pysignal并以一定的自发进行发射。__zoom级别使您可以将该信号连接到负责更改工具栏或您需要的方法。
For Example: 例如:
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
This probably won't work as is for your needs but the concept is there and can be modified to do what you want. 这可能无法满足您的需求,但是概念已经存在,可以修改以完成您想要的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.