2008-09-21 10 views
2

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

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

ответ

2

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

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

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

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

+0

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

+0

Я недостаточно понимаю проблему, чтобы ответить на ваш вопрос. Непонятно, почему вам нужно сделать что-нибудь прозрачным. Например, в чем смысл добавления холста к холсту? Есть хорошая вероятность того, что вы хотите добиться, возможно, может быть, не так, как вы думаете. – 2008-09-30 18:36:28

1

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

0

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

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

Я не уверен, что вы подразумеваете под «заменой деревьев виджета в и из». Если вы имеете в виду укладку виджетов и повышение или уменьшение виджетов, занимающих одно и то же пространство, Tk может сделать это тривиально. Возможно, это не то, что вы имеете в виду. – 2008-09-21 23:20:40

1

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

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

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

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