Я пытаюсь показать часть изображения в 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.