Нужна помощь с классами в Python - PullRequest
0 голосов
/ 24 февраля 2011

Я делаю программу, которая импортирует пользовательский виджет, который является классом (он наследуется от виджета Tkinter Frame).Все прекрасно работает, пока я не получу привязку.Чтобы избежать путаницы, мы будем вызывать основное приложение приложения, модуль, который импортирует виджет из lib, а виджет, который импортируется в приложение, будет называться cwid.

По сути, мне нужно как-то ссылаться на функцию в приложении, чтобы она могла быть связана с моим виджетом в lib.

Функция, с которой я пытаюсь связать виджет в cwid, это element_click (функция element_click находится в приложении.):

lambda event: element_click(event, elementinfo[3])

Таким образом, привязка будет выглядеть примерно так в lib(элемент является виджетом Canvas внутри cwid)

element.bind('<ButtonRelease-1>', lambda event: element_click(event, elementinfo[3]))

Вышеприведенная строка не будет работать, однако, видя, что element_click находится в приложении.Так что я попробовал обходную работу, которая, кажется, не работает.

import app

loc = app.EOG

element.bind('<ButtonRelease-1>', lambda event: loc.element_click( event, elementinfo[3]))

Когда я пробую вышеописанное, я получаю следующую ошибку:

TypeError: unbound method element_click() must be called with EOG instance as first argument (got Event instance instead)

EOG - это класс в приложении, который содержит element_click.

Кроме того, все приведенные выше фрагменты кода являются фрагментами.

РЕДАКТИРОВАТЬ:

Попытка loc = app.EOG () и перейти к следующей ошибке:

AttributeError: EOG instance has no attribute '__nonzero__'

1 Ответ

2 голосов
/ 24 февраля 2011

Я думаю, вы просто хотите:

loc = app.EOG()

Тогда loc - это экземпляр EOG, а loc.element_click - связанный метод, поэтому он работает как задумано.

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