Найти - Пользователи
Полная версия: Спотыкается на встроенной функции
Начало » Python для новичков » Спотыкается на встроенной функции
1
Igor-dis
Есть такой кусок программы из учебника:
import Tkinter
import math
#
tk=Tkinter.Tk()
canvas=Tkinter.Canvas(tk, height=360, width=480, background="#eeeeff",
					borderwidth=2).pack(side="bottom")
#
def plot_x_axe(x0, y0, x1):
	x_axe =[]
	xx=(x0, y0)
	x_axe.append(xx)
	xx=(x1, y0)
	x_axe.append(xx)
	canvas.create_line(x_axe, fill="black", width=2)

При запуске выдает ошибку:

AttributeError: ‘NoneType’ object has no attribute ‘create_line’

Из-за чего вылазит эта ошибка?
4kpt_III
1. Тема должна быть не здесь, а в разделе gui (это на будущее)
2. Метода .pack() возвращает None. Ну а None, естественно, не имеет метода .create_line
Чтобы решить это - нужно разделить создание виджета и его упаковку (размещение одним из менеджеров геометрии).

Ваш код:

import Tkinter
import math
#
tk = Tkinter.Tk()
canvas = Tkinter.Canvas(tk, height=360, width=480, background="#eeeeff", borderwidth=2)
canvas.pack(side="bottom")
#
def plot_x_axe(x0, y0, x1):
    x_axe = []
    xx = (x0, y0)
    x_axe.append(xx)
    xx = (x1, y0)
    x_axe.append(xx)
    canvas.create_line(x_axe, fill="black", width=2)

P.S. Будут вопросы - пишите…
Igor-dis

Извиняюсь, тупанул к вечеру.
4kpt_III
Для особо невнимательных повторю.
Вы вызываете метод класса Canvas, который возвращает None, поэтому с переменной canvas связывается не экземпляр Canvas (объект canvas), а результат выполнения метода .pack(), т.е. None. Итого в результате:

canvas = Tkinter.Canvas(tk, height=360, width=480, background="#eeeeff", borderwidth=2).pack(side="bottom")

Равносильно

canvas = None

Для аналогии: метод pack() работает так же как метод .append() у списка. Этот метод изменяет сам объект и, естественно, возвращает None.
4kpt_III
Не редактируйте свои посты… Это плохой тон!!! Если кому-то нужно что-то узнать, то не видно диалога, и нельзя собрать последовательность событий.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB