tkinter печать на холсте с функцией

Я пытаюсь напечатать прямоугольник в классе mainWindow с помощью функции OnButtonAddClick на моем холсте, но когда я пытаюсь это сделать, я получаю сообщение об ошибке: AttributeError: объект 'NoneType' не имеет атрибута 'create_rectangle'

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

import tkinter as tk
import Calc as c

class mainWindow(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        self.Canvas()

        #more stuff

    def button(self):
        self.buttonAdd = tk.Button(self, text='Add', width=12, command=self.OnButtonAddClick).grid(column=2, row=10)

    ##more stuff

    def Canvas(self):
        "Projecting elements on canvas"
        self.canvas = tk.Canvas(self, width=500, height=500, borderwidth=20, bg='white').grid(column=5, row=2, rowspan=30)

    def OnButtonAddClick(self):
        self.canvas.create_rectangle(200,200,200,200)
        print('hi')

if __name__ == '__main__':
    root = tk.Tk()
    mainWindow(root).pack(side='top', fill='both')
    root.mainloop()

person Bart    schedule 08.03.2018    source источник


Ответы (1)


Отделите вызовы компоновки от вызовов инициализации:

    self.buttonAdd = tk.Button(...).grid(...)
    ...
    self.canvas = tk.Canvas(...).grid(...)

to:

    self.buttonAdd = tk.Button(...)
    self.buttonAdd.grid(...)
    ...
    self.canvas = tk.Canvas(...)
    self.canvas.grid(...)
person Community    schedule 08.03.2018
comment
Спасибо! Это решило проблему :) - person Bart; 08.03.2018