鱼C论坛

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

[已解决]请教函数调用

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

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

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

x
本帖最后由 王天豹 于 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拎出来。
最佳答案
2022-1-17 22:38:49
王天豹 发表于 2022-1-17 22:26
声明 self.item_value = 'xxx'  我试过,是不会报错,得到了 'xxx'。但触发self.treeviewclick()后得不到 ...

"触发self.treeviewclick()后得不到值" ?那自己慢慢检查各个步骤的逻辑和返回,以及明确各个方法的用法是否正确吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-17 05:39:56 | 显示全部楼层
可以这样调用 item_value 这个变量:
print(self.item_value
要在调用的 变量名 前添加上 “self. “前缀,
这样就代表是调用自己类里定义的变量了,
否则 python 就会从类外寻找变量,
肯定没有,所以会报错!!!
当然你自己在定义变量 item_value 时也要在前面加上 “self.” 前缀

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 05:41:13 | 显示全部楼层
粗心了,刚才的print()漏了一个括号!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 11:02:31 | 显示全部楼层
加self也是不行的,AttributeError: 'Application' object has no attribute 'item_value'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 12:50:45 | 显示全部楼层
把代码放初始化部分试试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 12:51:22 | 显示全部楼层
你写 __init__ 了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 14:22:49 | 显示全部楼层
一、报错信息呢?   二、代码不多,且不涉及机密,请给全代码
想知道小甲鱼最近在做啥?请访问 -> 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拎出来。
想知道小甲鱼最近在做啥?请访问 -> 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函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 17:30:26 | 显示全部楼层
所以这个变量的设置得在 __init__ 初始化里定义它!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 17:31:30 | 显示全部楼层
对了吧,给个好评呗?
想知道小甲鱼最近在做啥?请访问 -> 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值。
想知道小甲鱼最近在做啥?请访问 -> 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循环有什么讲究吗??
想知道小甲鱼最近在做啥?请访问 -> 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行调用它,自然会报错。。

想知道小甲鱼最近在做啥?请访问 -> 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。是要在触发后马上得到。我这是不是循环依赖了,函数之间互相依赖的错误。好像又不是啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

"触发self.treeviewclick()后得不到值" ?那自己慢慢检查各个步骤的逻辑和返回,以及明确各个方法的用法是否正确吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-18 10:41:30 | 显示全部楼层
搞明白了,你们不要理我,我想静静
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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