Как в PySide / PyQt, увеличение и уменьшение пользовательского интерфейса - PullRequest
0 голосов
/ 13 февраля 2019

Время от времени я практикую PySide в Maya, и сейчас я хочу иметь пользовательский интерфейс, который будет работать по-разному с различным диапазоном масштабирования.В основном, когда я увеличиваю определенный диапазон, я хотел бы видеть один тип кнопок, когда я уменьшаю, снова разные кнопки.Кто-нибудь знает, какой макет я могу посмотреть или несколько примеров?Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

Для масштабирования у меня есть пользовательский 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 и делать излучение при определенных уровнях самообъявления .__ масштабирования, позволяя подключить этот сигнал к методукоторый будет отвечать за изменение панели инструментов или что-то еще, что вам нужно.

Например:

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

Это, вероятно, не будет работать, как для ваших нужд, но концепция есть иможно изменить, чтобы сделать то, что вы хотите.

...