Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2015 21:09:53

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать метод

Добрый день. Имеется примерно такая конструкция:

class AAA(object):
    def trace(message):
        print(message)
    def start():
        b = BBB()
        b.run()
class BBB(object):
    def trace(message, AAAtrace):
        AAAtrace.trace(message)
    def run():
        self.trace('Строка текста')
т.е. будет объект класса AAA, в нем создается объект класса BBB, и из этого объекта должен запуститься метод класса AAA.
Или как реализовать - будет объект с tkinter Text(), из этого объекта вызывается другой объект, который должен выводить в этом Text() свои сообщения?

Офлайн

#2 Май 21, 2015 21:43:35

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Вызвать метод

вам ооочень нужно почитать книгу!!!

class AAA(object):
    def trace(self, message):
        print(message)
    def start(self):
        b = BBB()
        b.run()
class BBB(object):
    def trace(self, message):
        print message
    def run(self):
        self.trace('hello')
a = AAA()
a.start()



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Май 21, 2015 22:06:37

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать метод

terabayt Вы неправильно меня поняли. В вашем коде ‘hello’ печатает метод BBB, а надо чтобы метод AAA. Наверно я плохо объяснил, потому что книгу не прочитал, да?

Офлайн

#4 Май 21, 2015 22:14:11

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Вызвать метод

ruthven
Наверно я плохо объяснил, потому что книгу не прочитал, да?
да! как мимнимум вы бы self написали
и вопросы отпали бы

что такое AAAtrace?
то что вы хотите сделать не имеет никакого практического смысла
насколько я понял, то вы хотите что-то этого?
class AAA(object):
    def trace(self, message):
        print(message)
    def start(self):
        b = BBB()
        self.trace(b.run())
class BBB(object):
    def run(self):
        return 'hello'
a = AAA()
a.start()

terabayt
вам ооочень нужно почитать книгу!!!



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Май 21, 2015 22:30:02

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать метод

terabayt BBB может посылать на печать не только одну строку, т.е. return не катит.

то что вы хотите сделать не имеет никакого практического смысла
Посоветуйте тогда, пожалуйста, как реализовать такую штуку - Имеется класс AAA, в нем с помощью модуля tkinter будет текстовая область (объект Text из tkinter), из AAA запускается BBB, который в эту текстовую область передаёт строки (сколько их будет заранее неизвестно)

Офлайн

#6 Май 21, 2015 23:11:31

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Вызвать метод

Классически, объекту может передаваться ссылка на объект-владелец, посредством которой можно или вызывать методы владельца, или слать ему сообщения. Применительно к tkinter ничего конкретного посоветовать не могу.

Офлайн

#7 Май 21, 2015 23:18:16

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать метод

Shaman А может можно каким-либо способом передать ссылку не на ААА, а на сам объект Text() ?

Офлайн

#8 Май 21, 2015 23:23:01

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Вызвать метод

ruthven
Посоветуйте тогда, пожалуйста, как реализовать такую штуку
ага, вы хотите чтоьы класс Б постоянно имел возможность вставлять в текстовое поле, что объявлено в классе А?!
в гуи не очень, поэтому не скажу верно ли так
такие вопросы нужно писать в ветке ГУИ!
import Tkinter
class AAA(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, parent, background="white")
        self.parent = parent
    def initUI(self):
        self.parent.title("Simple")
        self.pack(fill=Tkinter.BOTH, expand=1)
        self.text = Tkinter.Text(self)
        self.text.place(x=50, y=50)
        button = Tkinter.Button(self, text="Go", command=self.bb)
        button.place(x=50, y=10)
    def bb(self):
        b = BBB(self)
        b.run()
    def set_text(self, s):
        self.text.insert(1.0, s)
class BBB:
    def __init__(self, parent):
        self.parent =  parent
    def run(self):
        for i in xrange(10):
            self.parent.set_text(' -- %d --\n' % i)
def main():
    root = Tkinter.Tk()
    root.geometry("650x550+300+300")
    a = AAA(root)
    a.initUI()
    root.mainloop()
if __name__ == '__main__':
    main()



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Май 21, 2015 23:37:16

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызвать метод

terabayt Вроде бы суть уловил, сейчас попробую. Спасибо.

Офлайн

#10 Май 21, 2015 23:39:03

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Вызвать метод

ruthven
Shaman А может можно каким-либо способом передать ссылку не на ААА, а на сам объект Text() ?
Можно передавать ссылку на что угодно существующее.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version