Один вопрос : Как вы динамически рисуете объект Tkinter Canvas при нажатии кнопки?
Эта тема была изначально опубликована пользователем339860 (см. 1)как вопрос из двух частей, но вторая часть вопроса еще не рассмотрена.У меня такая же проблема, в частности Я не могу нарисовать объект Canvas из события кнопки .Получить ответ на этот вопрос помогут два человека, я и user339860;пожалуйста, посмотрите.
Приложение создает два кадра, расположенных слева и справа, второй кадр содержит объект Canvas.У меня есть кнопка в первом кадре, связанная с функцией / методом с именем drawRectangle .Приложение работает нормально, оно даже рисует прямоугольник в объекте Canvas, используя метод * create_rectangle * , пока вы не нажмете кнопку.Когда вы нажимаете кнопку, вы получаете сообщение со следующим:
tkinter_app_27Nov2010.py ", строка 25, в drawRectangle self.myCan.create_rectangle (64,64,110,110, fill = 'blue') AttributeError: Объект 'NoneType' не имеет атрибута 'create_rectangle'
Я подумал, что это как-то связано с областью действия объекта Canvas, поэтому я создал уровень классаПеременная установлена в Нет , но это не решило проблему. Я думал о списке отображения Canvas (см. 2), но страницы руководства Tk не отражаютметод добавления нового объекта, который я смог найти.
КОД:
# tkinter_app_27Nov2010.py
from Tkinter import *
class Application(Frame):
myCan = None
def createWidgets(self):
uiFrame = Frame(self,width=300,height=30)
uiFrame.configure(background='#e0e0e0')
uiFrame.grid(row=0,column=0,sticky=N+S)
outputFrame = Frame(self,width=300,height=300,background='#C0C0C0')
outputFrame.grid(row=0,column=1)
newBtn = Button(uiFrame,text="testing",command=self.drawRectangle)
newBtn.grid(row=0,column=0)
fillLbl = Label(uiFrame,text='-').grid(row=1,sticky=N+S)
newLBL = Label(outputFrame,text="another testing",background='#C0C0C0')
newLBL.grid(row=0)
myCan = Canvas(outputFrame,width=300,height=300,borderwidth=1,relief='sunken')
myCan.grid(row=1)
myCan.create_rectangle(34,34,50,50,fill='red')
def drawRectangle(self):
self.myCan.create_rectangle(64,64,110,110,fill='blue')
def __init__(self,master):
Frame.__init__(self,master)
self.pack()
self.createWidgets()
root = Tk () myApp = Application (master = root) root.title ("Тестирование Tkinter! ") MyApp.mainloop ()
Должен быть способ получить представление о« модели отображения повреждений / исправлений »(см. 3), которую объект Tkinter Canvas использует для обновления самого себяПожалуйста, помогите!
Ссылки:
1.) Stackoverflow.com/questions/2824041/динамически добавлять элементы в tkinter-canvas
2.) www.tcl.tk/man/tcl8.4/TkCmd/canvas.htm#M16
3.) effbot.орг / tkinterbook / canvas.htm # производительность вопросы