Как мне перекрыть виджеты с менеджером геометрии пакета Tkinter?

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
2 775
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

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

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

Matt Gregory 22.09.2008 06:29

Я недостаточно хорошо понимаю проблему, чтобы ответить на ваш вопрос. Непонятно, зачем что-то делать прозрачным. Например, какой смысл добавлять холст на холст? Есть хороший шанс, что то, чего вы хотите достичь, возможно, но, возможно, не так, как вы думаете.

Bryan Oakley 30.09.2008 22:36

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

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

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

Я не совсем понимаю, что вы имеете в виду под «заменой деревьев виджетов». Если под этим вы имеете в виду наложение виджетов и повышение или понижение виджетов, занимающих одно и то же пространство, Tk может сделать это тривиально. Возможно, вы не это имеете в виду.

Bryan Oakley 22.09.2008 03:20

Изменение дочернего элемента виджета контейнера и скрытие / отключение старого дочернего элемента.

ConcernedOfTunbridgeWells 22.09.2008 16:50

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

Bryan Oakley 28.09.2008 23:58

... turned out to be unworkable because I wanted to add labels and more canvases to it, but I can't find any way to make their backgrounds transparent

Если допустимо загрузить дополнительное расширение, взгляните на Ткцинц. С сайта,

Tkzinc (historically called Zinc) widget is very similar to the Tk Canvas in that they both support structured graphics. Like the Canvas, Tkzinc implements items used to display graphical entities. Those items can be manipulated and bindings can be associated with them to implement interaction behaviors. But unlike the Canvas, Tkzinc can structure the items in a hierarchy, has support for scaling and rotation, clipping can be set for sub-trees of the item hierarchy, supports muti-contour curves. It also provides advanced rendering with the help of OpenGL, such as color gradient, antialiasing, transparencies and a triangles item.

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

Я сейчас просто работаю над школьным заданием, но я определенно рассмотрю его для чего-то серьезного. Спасибо за чаевые!

Matt Gregory 23.09.2008 04:56

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