Tkinter Проблемы Холста

1

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

Ошибка:

TypeError: tag_raise() got an unexpected keyword argument 'aboveThis'

Пример моей проблемы:

import Tkinter as Tk


root = Tk.Tk()

w, h = 200, 200

a = Tk.Canvas(root, bg='red', width=w, height=h)
a.grid(column=0, row=0)

b = Tk.Canvas(root, bg='blue', width=w, height=h)
b.grid(column=0, row=0)

a.lift(aboveThis=None)

root.mainloop()

Если я делаю то же самое с виджетами Frame, он работает.

Пример:

import Tkinter as Tk


root = Tk.Tk()

w, h = 200, 200

a = Tk.Frame(root, bg='red', width=w, height=h)
a.grid(column=0, row=0)

b = Tk.Frame(root, bg='blue', width=w, height=h)
b.grid(column=0, row=0)

a.lift(aboveThis=None)

root.mainloop()
Теги:
canvas
tkinter

2 ответа

3
Лучший ответ

Метод canvas lift() является псевдонимом для tag_raise(), который используется для создания не самого холста, а объектов внутри холста.

Я нашел этот комментарий в исходном коде Tkinter.py:

# lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
# so the preferred name for them is tag_lower, tag_raise
# (similar to tag_bind, and similar to the Text widget);
# unfortunately can't delete the old ones yet (maybe in 1.6)

Если вы замените a.lift(aboveThis=None) на Tk.Misc.lift(a, aboveThis=None), то виджет холста будет поднят правильно.

1

Я пришел к этому вопросу, потому что я действительно хотел реализовать эквивалент оператора tk, например

canvas-pathName raise tagOrId ?aboveThis?

чтобы поднять отдельные элементы холста в определенную позицию z-. Для тех, кто интересуется тем же, я просто опубликую свое понимание (после небольшого head- царапания), что это можно сделать в Python довольно легко:

canvasObject.tag_raise(tagOrId, tagOrId2)

Второй аргумент здесь просто включается в командную строку tk и затем интерпретируется как значение "aboveThis".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню