当类调用彼此的方法时,Python / Tkinter失败

时间:2013-02-27 22:48:59

标签: python-2.7 tkinter

我正在使用Tkinter在Python 2.7.3中编写图形前端。我有一个主菜单(示例中为A)和一个窗口(B)。 A包含一个列表框,B正在做一些需要A中列表框内容的东西.B完成工作后,我需要一个名为A(doSomething)的方法。我的简化代码如下所示:

#!/usr/bin/env python

import Tkinter as tk

class A(object):
    def __init__(self, root):
        self.__mainMenu = root
        self.__LB = tk.Listbox(self.__mainMenu)
        self.__LB.pack()
        self.__LB.insert(tk.END, "foo")
        b = B(self.__mainMenu, self.__LB)

    def doSomething(self):
            print "Ham and spam!"

class B(object):
    def __init__(self, mainMenu, LB):
        self.__mainMenu = mainMenu
        self.__LB = LB
        print self.__LB.get(0)
        self.__mainMenu.doSomething()

def main():
    root = tk.Tk()
    gui = A(root)
    root.mainloop()

main()

生成以下输出:

$ ./myTest.py 
foo
Traceback (most recent call last):
  File "./myTest.py", line 29, in <module>
    main()
  File "./myTest.py", line 26, in main
    gui = A(root)
  File "./myTest.py", line 11, in __init__
    b = B(self.__mainMenu, self.__LB)
  File "./myTest.py", line 21, in __init__
    self.__mainMenu.doSomething()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in __getattr__
    return getattr(self.tk, attr)
AttributeError: doSomething

此错误来自哪里?为什么错误输出如此差?

1 个答案:

答案 0 :(得分:2)

我总是使用gtk(没有使用Tk的经验),但是从我看到的,你在B中调用root的doSomething方法,而不是A类。 init .__ mainMenu.doSomething()<登记/> 在A init中使用self调用B:

b = B(self, self.__LB)