





Ответ на ваш конкретный вопрос - нет. У вас не может быть двух состояний или иным образом использовать pack двумя разными способами в одном и том же родительском элементе.
Однако я думаю, что вы хотите достичь очень просто. Используйте встроенные функции холста, чтобы создать элемент изображения, который является частью холста, а затем упакуйте вещи в холст, как если бы это была рамка.
Вы можете сделать то же самое, создав виджет метки с изображением, а затем упаковать другие виджеты в метку.
Одним из преимуществ использования холста является то, что вы можете легко расположить изображение, чтобы заполнить весь холст повторяющимся фоновым изображением, чтобы по мере роста окна изображение продолжало заполнять окно (конечно, вы можете просто использовать достаточно большое исходное изображение .. .)
Я недостаточно хорошо понимаю проблему, чтобы ответить на ваш вопрос. Непонятно, зачем что-то делать прозрачным. Например, какой смысл добавлять холст на холст? Есть хороший шанс, что то, чего вы хотите достичь, возможно, но, возможно, не так, как вы думаете.
Я считаю, что ответ Брайана, вероятно, является лучшим общим решением. Однако вы можете также захотеть взглянуть на диспетчер геометрии место. Менеджер геометрии место позволяет вам указать точный размер и положение виджета ... что может быстро утомить, но выполнит свою работу.
Не обошлось и без того, чтобы менять местами деревья виджетов, что, я не думаю, можно сделать чисто с помощью Tk. Другие наборы инструментов могут сделать это немного более элегантно.
Я не совсем понимаю, что вы имеете в виду под «заменой деревьев виджетов». Если под этим вы имеете в виду наложение виджетов и повышение или понижение виджетов, занимающих одно и то же пространство, Tk может сделать это тривиально. Возможно, вы не это имеете в виду.
Изменение дочернего элемента виджета контейнера и скрытие / отключение старого дочернего элемента.
Вы, безусловно, можете иметь несколько дочерних элементов в контейнере и скрывать всех, кроме одного. Есть как минимум два поддерживаемых способа сделать это - поднять / опустить или использовать диспетчер геометрии, чтобы забыть один и добавить другой. сетка особенно хороша в этом (читайте "удаление сетки")
... 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.
Я сейчас просто работаю над школьным заданием, но я определенно рассмотрю его для чего-то серьезного. Спасибо за чаевые!
Мне нравится ваш ответ - вы были абсолютно правы во всем - за исключением того, что весь подход оказался неработоспособным, потому что я хотел добавить к нему ярлыки и больше холстов, но я не могу найти способ сделать их фон прозрачным. Вы случайно не знаете какой-нибудь способ?