请教函数调用
本帖最后由 王天豹 于 2022-1-17 15:47 编辑def 列表显示(self):
# 表格开仓
columns = ['代码', '名称', '持仓量']
self.table = ttk.Treeview(
master=self.持仓股票列表,# 父容器
height=5,# 表格显示的行数,height行
columns=columns,# 显示的列
show='headings',# 隐藏首列
)
self.table.heading(column='代码', text='代码',
command=lambda: print('代码'))# 定义表头
self.table.heading('名称', text='名称', )# 定义表头
self.table.heading('持仓量', text='持仓量', )# 定义表头
self.table.column('代码', width=60, minwidth=60, anchor=S, )# 定义列
self.table.column('名称', width=60, minwidth=60, anchor=S)# 定义列
self.table.column('持仓量', width=60, minwidth=60, anchor=S)# 定义列
self.table.pack(pady=0)
self.table.bind('<ButtonRelease-1>',self.treeviewclick) #绑定左键单击
print(self.item_value)
def treeviewclick(self,event):
for item in self.table.selection():
self.item_value=self.table.item(item,'values')
print(self.item_value)
请教高人, 同一个类里的函数, 上面的函数怎样才能调用到下面函数的 item_value 这个值。直接调用是 AttributeError: 'Application' object has no attribute 'item_value'。定义global好像也不行。
Application,是我的类名。
感谢大家帮助,我现在有点头绪了,代码是可以跑起来的。
但运行时会报错,AttributeError: 'Application' object has no attribute 'item_value' 21行。是因为19行 treeviewclick()没有触发,所为没有item_value。然后触发19行后,就不会有21行什么事了。这是什么错误?叫循环调用还是重复调用,反正就是乱。这要怎么整,如何把item_value拎出来。 可以这样调用 item_value 这个变量:
print(self.item_value
要在调用的 变量名 前添加上 “self. “前缀,
这样就代表是调用自己类里定义的变量了,
否则 python 就会从类外寻找变量,
肯定没有,所以会报错!!!
当然你自己在定义变量 item_value 时也要在前面加上 “self.” 前缀
听懂了吗?懂了就给个好评吧!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易,请给个好评!!!
兄弟!给个好评!求求了!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}
粗心了,刚才的print()漏了一个括号! 加self也是不行的,AttributeError: 'Application' object has no attribute 'item_value' 把代码放初始化部分试试!
你写 __init__ 了吗 一、报错信息呢? 二、代码不多,且不涉及机密,请给全代码 感谢以上,哪有什么机密代码,只是新手勉强拼出来的,没有章法,总算是能跑,太污{:5_107:},不好意思拿出手。
感谢大家帮助,我现在有点头绪了,代码是可以跑起来的。
但运行时会报错,AttributeError: 'Application' object has no attribute 'item_value' 21行。是因为19行 treeviewclick()没有触发,所为没有item_value。然后触发19行后,就不会有21行什么事了。这是什么错误?叫循环调用还是重复调用,反正就是乱。这要怎么整,如何把item_value拎出来。 本帖最后由 Stubborn 于 2022-1-17 16:18 编辑
看你的代码,我有一个疑问,你需要访问到item_value,是等 treeviewclick(self,event)这个函数运行完成后,去访问,还是怎么样去访问,因为里面是写了for循环的
另外如果只是想处理这个错误: AttributeError: 'Application' object has no attribute 'item_value' ,可以在访问前查询一下该类是否有这个参数。使用: 内置的getattr函数 所以这个变量的设置得在 __init__ 初始化里定义它! 对了吧,给个好评呗?
{:10_254:}{:10_254:}{:10_254:}{:10_254:} 本帖最后由 王天豹 于 2022-1-17 21:42 编辑
python爱好者. 发表于 2022-1-17 17:30
所以这个变量的设置得在 __init__ 初始化里定义它!
__init__ 初始化也不是正确答案{:5_96:},我是要得到触发 treeviewclick(self,event)这个函数后得到的item_value值。 Stubborn 发表于 2022-1-17 16:13
看你的代码,我有一个疑问,你需要访问到item_value,是等 treeviewclick(self,event)这个函数运行完成 ...
是要触发treeviewclick(self,event)后访问,在同一个函数里触发后再访问。
treeviewclick(self,event)里的for循环有什么讲究吗?? 本帖最后由 阿奇_o 于 2022-1-17 21:55 编辑
王天豹 发表于 2022-1-17 15:47
感谢以上,哪有什么机密代码,只是新手勉强拼出来的,没有章法,总算是能跑,太污,不好意思拿出 ...
你一开始给出完整报错信息,就不用浪费这么多时间。
直接错误错在 21行 print(self.item_value) ,也就是说 self(Application实例)的item_value 还没有被声明
(还没有被绑定)就被你调用了,所以报 AttributeError: 'Application' object has no attribute 'item_value' 。
解决:可以直接 先声明 self.item_value = 'xxx' 或者 先执行一次 self.treeviewclick() 。
注意: 19行的bind绑定,只是绑定——只有当左键被点击且释放后,才会执行self.treeviewclick,所以self.item_value还没有被声明,你就在21行调用它,自然会报错。。
阿奇_o 发表于 2022-1-17 21:53
你一开始给出完整报错信息,就不用浪费这么多时间。
直接错误错在 21行 print(self.item_value) , ...
声明 self.item_value = 'xxx'我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到值,在self.treeviewclick()里有我要的self.item_value。是要在触发后马上得到。我这是不是循环依赖了,函数之间互相依赖的错误。好像又不是啊。{:5_100:} 王天豹 发表于 2022-1-17 22:26
声明 self.item_value = 'xxx'我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到 ...
"触发self.treeviewclick()后得不到值" ?那自己慢慢检查各个步骤的逻辑和返回,以及明确各个方法的用法是否正确吧。 搞明白了,你们不要理我,我想静静{:5_104:}。{:10_266:}{:10_266:}{:10_266:}
页:
[1]