Как мне наложить виджеты друг на друга с помощью Tkinter pack geometry manager?

StackOverflow https://stackoverflow.com/questions/112263

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу поставить Canvas с изображением в моем окне, а затем я хочу стая виджеты поверх него, так что холст выступает в качестве фона.

Возможно ли иметь два состояния для pack менеджер:один для одного набора виджетов, а другой для другого набора?

Это было полезно?

Решение

Ответ на ваш конкретный вопрос - нет.Вы не можете иметь два состояния или иным образом использовать pack двумя разными способами в одном родительском файле.

Однако то, чего, я думаю, вы хотите добиться, очень просто.Используйте встроенные функции canvas, чтобы создать элемент изображения, который является частью canvas, затем упакуйте его в canvas, как если бы это была рамка.

Вы можете выполнить аналогичную задачу, создав виджет label с изображением, а затем упакуйте другие ваши виджеты в ярлык.

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

Другие советы

Я считаю, что ответ Брайана, вероятно, является лучшим общим решением.Тем не менее, вы также можете захотеть взглянуть на место менеджер по геометрии.Тот Самый место geometry Manager позволяет вам указать точный размер и положение виджета...это может быстро наскучить, но позволит выполнить работу.

...оказалось, что это неосуществимо, потому что я хотел добавить к нему ярлыки и больше холстов, но я не могу найти никакого способа сделать их фон прозрачным

Если допустимо загрузить дополнительное расширение, взгляните на Tkzinc ( Цинк ).С веб-сайта,

Виджет Tkzinc (исторически называемый Zinc) очень похож на Tk Canvas тем, что они оба поддерживают структурированную графику.Как и Canvas, Tkzinc реализует элементы, используемые для отображения графических объектов.Этими элементами можно манипулировать, и с ними могут быть связаны привязки для реализации поведения при взаимодействии.Но в отличие от Canvas, Tkzinc может структурировать элементы в иерархию, имеет поддержку масштабирования и поворота, для поддеревьев иерархии элементов может быть задана обрезка, поддерживает многоконтурные кривые.Он также обеспечивает расширенный рендеринг с помощью OpenGL, такой как цветовой градиент, сглаживание, прозрачные пленки и элемент "треугольники".

В настоящее время я использую его в проекте tcl и вполне доволен результатами.Доступны расширения для tcl, perl и python.

Не без замены деревьев виджетов внутри и снаружи, что, я не думаю, что можно сделать чисто с помощью Tk.Другие наборы инструментов могут сделать это немного более элегантно.

  • COM / VB / MFC может сделать это с помощью элемента управления ActiveX - вы можете скрыть / показать несколько элементов управления ActiveX в одном регионе.Любой из контейнеров позволит вам сделать это, изменив дочерний элемент.Если вы используете программу для конкретной Windows, возможно, вам удастся выполнить это таким образом.
  • QT также позволит вам сделать это аналогичным образом.
  • GTK немного сложнее.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top