【发布时间】:2015-04-02 05:15:57
【问题描述】:
我正在使用tkinter 开发一个带有GUI 的包。现在通过 tkinter 的 bind 方法通信类时出现问题。下面列出了一个代表我想要做的简单代码:
import Tkinter as tk
lists = [1,2,3,4,5,6,7]
class selects():
def __init__(self,root):
self.root = root
self.selectwin()
def selectwin(self):
""" listbox and scrollbar for selection """
sb = tk.Scrollbar(self.root)
lb = tk.Listbox(self.root, relief ='sunken', cursor='hand2')
sb.config(command=lb.yview)
sb.pack(side=tk.RIGHT, fill=tk.Y)
lb.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
lb.config(yscrollcommand=sb.set, selectmode='single')
for value in lists: lb.insert(tk.END,value)
lb.bind('<Double-1>',lambda event: self.getvalue())
self.listbox = lb
def getvalue(self):
""" get the selected value """
value = self.listbox.curselection()
if value:
self.root.quit()
text = self.listbox.get(value)
self.selectvalue = int(text)
def returnvalue(self):
return self.selectvalue
class do():
def __init__(self):
root = tk.Tk()
sl = selects(root)
# do something... for example, get the value and print value+2, as coded below
value = sl.returnvalue()
print value+2
root.mainloop()
if __name__ == '__main__':
do()
selects 类通过Listbox 小部件在lists 中选择一个值,并通过属性returnvalue 返回选择的值以供使用。但是,运行上述代码时会出现错误:
Traceback (most recent call last):
File "F:\Analysis\Python\fpgui\v2\test2.py", line 47, in <module>
do()
File "F:\Analysis\Python\fpgui\v2\test2.py", line 41, in __init__
value = sl.returnvalue()
File "F:\Analysis\Python\fpgui\v2\test2.py", line 32, in returnvalue
return self.selectvalue
AttributeError: selects instance has no attribute 'selectvalue'
我认为可以通过将类selects 和do 组合为一个类来解决此错误。但是在我的包中,selects 类会被多个类调用,所以最好将selects 作为一个独立的类。此外,像这样的类之间的通信将经常应用在我的包中。例如,在使用pick_event 在matplotlib 图中选择一些信息后执行某些操作,或者在使用Entry 小部件在另一个类中输入文本后更新一个类中的列表。那么,对此有什么建议吗?提前致谢。
【问题讨论】: