鱼C论坛

 找回密码
 立即注册
查看: 1330|回复: 16

[已解决]请教函数调用

[复制链接]
发表于 2022-1-16 23:10:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 王天豹 于 2022-1-17 15:47 编辑
  1. def 列表显示(self):
  2.     # 表格  开仓
  3.         columns = ['代码', '名称', '持仓量']
  4.         self.table = ttk.Treeview(
  5.                 master=self.持仓股票列表,  # 父容器
  6.                 height=5,  # 表格显示的行数,height行
  7.                 columns=columns,  # 显示的列
  8.                 show='headings',  # 隐藏首列
  9.                 )
  10.         self.table.heading(column='代码', text='代码',
  11.                     command=lambda: print('代码'))  # 定义表头
  12.         self.table.heading('名称', text='名称', )  # 定义表头
  13.         self.table.heading('持仓量', text='持仓量', )  # 定义表头
  14.         
  15.         self.table.column('代码', width=60, minwidth=60, anchor=S, )  # 定义列
  16.         self.table.column('名称', width=60, minwidth=60, anchor=S)  # 定义列
  17.         self.table.column('持仓量', width=60, minwidth=60, anchor=S)  # 定义列   
  18.         self.table.pack(pady=0)
  19.         self.table.bind('<ButtonRelease-1>',self.treeviewclick)           #绑定左键单击
  20.           
  21.         print(self.item_value)

  22. def treeviewclick(self,event):  
  23.         for item in self.table.selection():
  24.             self.item_value=self.table.item(item,'values')
  25.             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拎出来。
最佳答案
2022-1-17 22:38:49
王天豹 发表于 2022-1-17 22:26
声明 self.item_value = 'xxx'  我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到 ...

"触发self.treeviewclick()后得不到值" ?那自己慢慢检查各个步骤的逻辑和返回,以及明确各个方法的用法是否正确吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-17 05:39:56 | 显示全部楼层
可以这样调用 item_value 这个变量:
  1. print(self.item_value
复制代码

要在调用的 变量名 前添加上 “self. “前缀,
这样就代表是调用自己类里定义的变量了,
否则 python 就会从类外寻找变量,
肯定没有,所以会报错!!!
当然你自己在定义变量 item_value 时也要在前面加上 “self.” 前缀

听懂了吗?懂了就给个好评吧!!!

打字不易,请给个好评!!!
兄弟!给个好评!求求了!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 05:41:13 | 显示全部楼层
粗心了,刚才的print()漏了一个括号!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 11:02:31 | 显示全部楼层
加self也是不行的,AttributeError: 'Application' object has no attribute 'item_value'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 12:50:45 | 显示全部楼层
把代码放初始化部分试试!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 12:51:22 | 显示全部楼层
你写 __init__ 了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 14:22:49 | 显示全部楼层
一、报错信息呢?   二、代码不多,且不涉及机密,请给全代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 15:47:57 | 显示全部楼层
感谢以上,哪有什么机密代码,只是新手勉强拼出来的,没有章法,总算是能跑,太污,不好意思拿出手。

感谢大家帮助,我现在有点头绪了,代码是可以跑起来的。
但运行时会报错,AttributeError: 'Application' object has no attribute 'item_value'     21行。是因为19行 treeviewclick()没有触发,所为没有item_value。然后触发19行后,就不会有21行什么事了。这是什么错误?叫循环调用还是重复调用,反正就是乱。这要怎么整,如何把item_value拎出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 16:13:44 | 显示全部楼层
本帖最后由 Stubborn 于 2022-1-17 16:18 编辑

看你的代码,我有一个疑问,你需要访问到  item_value  ,是等 treeviewclick(self,event)这个函数运行完成后,去访问,还是怎么样去访问,因为里面是写了for循环的


另外如果只是想处理这个错误: AttributeError: 'Application' object has no attribute 'item_value'   ,可以在访问前查询一下该类是否有这个参数。使用: 内置的getattr函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 17:30:26 | 显示全部楼层
所以这个变量的设置得在 __init__ 初始化里定义它!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 17:31:30 | 显示全部楼层
对了吧,给个好评呗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 21:25:41 | 显示全部楼层
本帖最后由 王天豹 于 2022-1-17 21:42 编辑
python爱好者. 发表于 2022-1-17 17:30
所以这个变量的设置得在 __init__ 初始化里定义它!


__init__ 初始化也不是正确答案,我是要得到触发 treeviewclick(self,event)这个函数后得到的item_value值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 21:31:53 | 显示全部楼层
Stubborn 发表于 2022-1-17 16:13
看你的代码,我有一个疑问,你需要访问到  item_value  ,是等 treeviewclick(self,event)这个函数运行完成 ...

是要触发treeviewclick(self,event)后访问,在同一个函数里触发后再访问。
treeviewclick(self,event)里的for循环有什么讲究吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 21:53:47 | 显示全部楼层
本帖最后由 阿奇_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行调用它,自然会报错。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 22:26:20 | 显示全部楼层
阿奇_o 发表于 2022-1-17 21:53
你一开始给出完整报错信息,就不用浪费这么多时间。

直接错误错在 21行 print(self.item_value) , ...

声明 self.item_value = 'xxx'  我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到值,在self.treeviewclick()里有我要的self.item_value。是要在触发后马上得到。我这是不是循环依赖了,函数之间互相依赖的错误。好像又不是啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 22:38:49 | 显示全部楼层    本楼为最佳答案   
王天豹 发表于 2022-1-17 22:26
声明 self.item_value = 'xxx'  我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到 ...

"触发self.treeviewclick()后得不到值" ?那自己慢慢检查各个步骤的逻辑和返回,以及明确各个方法的用法是否正确吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-18 10:41:30 | 显示全部楼层
搞明白了,你们不要理我,我想静静
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 15:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表