Показывать частичное изображение во вьюпорте, Python 3, Gtk + 3 - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь показать часть изображения в Gtk ScrollableWindow (с окном просмотра), но я не могу найти достойных примеров, и в документации, кажется, предполагается, что вы уже знаете все о Gtk + до того, как начали.

Представьте себе длинную линейку, показывающую 64-е дюйма (увеличенные до полезного видимого размера), лежащую так, что, когда вы смотрите на нее, линии разделения горизонтальны. Поверх этого поместите кусок непрозрачной бумаги с вырезанным тонким прямоугольником angular смотровым окном, чтобы вы могли видеть 3 или 5 разделительных линий одновременно. Кусок тонкой черной проволоки приклеен к середине смотрового окна, чтобы обеспечить базовую линию.

Теперь сдвиньте линейку вверх и / или вниз за бумагу - это будет означать, что размер становится меньше или больше соответственно. В любой момент вы можете увидеть «некоторые» разделительные линии и приблизительную долю дюйма, к которой вы ближе всего, посмотрев на тонкий черный провод.

Я хочу воспроизвести этот эффект на экране, используя Python3 и Gtk + 3, в идеале в виде сетки. Я, вероятно, собираюсь использовать фиксированный макет, поскольку приложение будет всегда в полноэкранном режиме на дисплее с известным разрешением, но было бы неплохо увидеть, как это сделать с одним гибких макетов.

Мне не нужно делать никакого масштабирования или вращения (ну ... вращение могло бы быть круто); но сначала мне просто нужно выяснить, как, черт возьми, разместить изображение в определенном c месте внутри окна просмотра, которое слишком мало, чтобы вместить все изображение.

Было бы проще в Qt? Я все еще могу менять технологии ... (но пока я застрял с Python)

Вот фрагмент кода, показывающий, насколько я (еще не) далеко продвинулся:

    # Add a scrollable window.
    self.viewportFractions = Gtk.ScrolledWindow()
    self.viewportFractions.set_border_width=2
    self.viewportFractions.set_css_name("viewportFraction")
    self.viewportFractions.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)   # No scrollbars ever

    # load a demo image
    image=Gtk.Image()
    image.set_from_file("sh*t-ruler.png")
    self.viewportFractions.add_with_viewport(image)

    self.attach(self.viewportFractions,3,2,2,2)

Это делает красивую большую копию всего изображения на экране. Дальнейшие попытки изменить размер чего-либо, похоже, не имеют никакого эффекта ... self в данном случае является объектом Gtk.Grid.

...