Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:'classname‘对象不可调用(在通过tkinter.Button.command调用的方法中)

TypeError:'classname‘对象不可调用(在通过tkinter.Button.command调用的方法中)
EN

Stack Overflow用户
提问于 2019-07-07 09:23:28
回答 1查看 58关注 0票数 2

我想在单击tkinter.Button时调用对象的方法。

我已经将我的代码简化为下面的代码。当我直接调用函数(newone) (如“newone(‘3’)”)时,一切看起来都很好,但是当单击按钮(调用相同的函数)时,就会得到一个错误。

我看过类似的'typerror: x不是可调用的‘,但我没有发现任何类似于我的代码,我不知道这里出了什么问题。对lot.addone(name)的实际调用似乎有效,因为只有当我想在addone()内实例化一个新对象时才会得到错误。类thing()是否不再可见(因为通过tkinter.button调用它?)我怎样才能让它再次可见?任何帮助都将不胜感激。

代码语言:javascript
运行
AI代码解释
复制
    import tkinter

    window = tkinter.Tk()

    def newone(name='four'):
        global lot
        lot.addone(name)

    class thing:
        def __init__(self):
            self.name = 'nothing'

    class list_of_things:
        def __init__(self):
            self.things = dict()

        def addone(self, name):
            self.things[name] = thing()     ## the error location
            self.things[name].name = name


    lot = list_of_things()
    lot.addone('one')   ## something dummy
    lot.addone('two')
    newone('three')     ## this works

    print(lot.things['one'].name)
    print(lot.things['three'].name)   ## prints out correctly

    row_index = 0
    for (key, thing) in lot.things.items():
        tkinter.Label(window, text = thing.name).grid(row = row_index)
        row_index = row_index + 1

    tkinter.Button(window, text = 'New task', command = newone).grid(row = row_index) ## this fails

    window.mainloop()

我得到的错误如下:

代码语言:javascript
运行
AI代码解释
复制
Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\tools\Miniconda3\envs\3dot6kivy\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "test.py", line 8, in newone
    lot.addone(name)
  File "test.py", line 19, in addone
    self.things[name] = thing()     ## the error location
TypeError: 'thing' object is not callable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-07 18:28:29

类名thing被名为thing的变量屏蔽。我将类重命名为Thing,它起作用了。

还对下列守则作了其他调整:

代码语言:javascript
运行
AI代码解释
复制
import tkinter as tk


class Thing:
    def __init__(self):
        print("adding a 'Thing' object")
        self.name = 'nothing'


class ListOfThings:
    def __init__(self):
        self.things = dict()

    def addone(self, name):
        self.things[name] = Thing()
        self.things[name].name = name


def newone(name='four'):
    lot.addone(name)       # lot doesn't need to be global if you are not assigning to it


if __name__ == '__main__':

    window = tk.Tk()

    lot = ListOfThings()
    lot.addone('one')
    lot.addone('two')
    newone('three')

    print(lot.things['one'].name)
    print(lot.things['three'].name)

    row_index = 0
    for (key, thing) in lot.things.items():
        tk.Label(window, text=thing.name).grid(row=row_index)
        row_index = row_index + 1

    tk.Button(window, text='New task', command=newone).grid(row=row_index)

    window.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56924472

复制
相关文章
如何通过反射调用对象的方法?
import java.lang.reflect.Method; class MethodInvokeTest { public static void main(String[] args) throws Exception { String str = "hello"; Method m = str.getClass().getMethod("toUpperCase"); System.out.println(m.invoke(str));
唐怀瑟
2018/08/30
3K0
Python中通过对象不能调用类方法和静态方法的解析
当我们在使用Python编写程序时,可能会遇到通过对象调用类方法和静态方法失败的问题,那么这是为什么呢?接下来,我们将从多个方面对这个问题进行详细解析。
很酷的站长
2023/08/16
1.1K0
python type error是什么意思_Python 报错 TypeError:’DoesNotExist’对象不可调用
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
全栈程序员站长
2022/11/15
1.1K0
frida反射调用对象中的方法与字段
该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)
用户4682003
2022/05/19
4.6K0
frida反射调用对象中的方法与字段
在OrderStatusActor构造方法中调用StartTimerAsync
TimerCallbackAsync方法以二进制形式接收用户状态。 在示例中,回调在将状态写入日志之前将状态 string 解码回 。
用户7108768
2021/09/26
2K0
PHP中 对象自动调用的方法:__set()、__get()、__tostring()
 (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部
shirayner
2018/08/10
2.7K0
在java中通过API调用HBase入门学习
在之前的文章hdfs API学习中,我们已经能够成功连接hdfs,并对文件进行读写。hbase数据库的操作也非常简单,但你需要先大致了解一下hbase的架构。
zhangheng
2020/12/01
1.3K0
springboot中通过main方法调用service或dao
大多数情况下,我们使用springboot是创建一个web项目,然后通过接口访问,但是也有特殊情况,比如线上跑着的web项目,有一些特殊的数据,需要经过计算导入到数据库,这个时候,我们可能需要原来的web项目中的一些service,dao才辅助操作,但是又不能在服务端新开接口。我们通过springboot的main方法执行这些操作。 此时,service和到需要通过上下文获得。
tongyao
2022/06/09
1.2K0
Java中对象调用机制
可以看到,swap1方法没有实现两个对象的交换,而swap2方法实现了两个对象的交换,
fanfan
2022/05/07
4630
Java中对象调用机制
PHP通过反射方法调用执行类中的私有方法
PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。
魏杰
2022/12/23
1.8K0
JavaScript 的 this 小结纯粹的函数调用作为对象方法的调用作为构造函数调用apply 调用
函数的不同使用场合,this有不同的值。 总的来说,this就是函数运行时所在的环境对象。 下面分情况,详细讨论
JavaEdge
2018/08/02
2.9K0
JavaScript 的 this 小结纯粹的函数调用作为对象方法的调用作为构造函数调用apply 调用
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )
调用 jclass GetObjectClass(jobject obj) 或 jclass FindClass(const char* name) 方法 , 获取 jclass 类型变量 ;
韩曙亮
2023/03/27
8.7K0
【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )
在AppCode中的razor调用HtmlHelper方法和UrlHelper方法
using System.Web.WebPages; using System.Web.Mvc;
javascript.shop
2019/09/04
2.2K0
python通过字符串调用方法_python调用shell脚本
代码中借鉴了https://blog.csdn.net/weixin_43936250/article/details/105543266的sm3加密,和https://blog.csdn.net/jerry_liufeng/article/details/109603462的目录实时监控
全栈程序员站长
2022/10/01
5170
Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?
在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。但是如果需要在其他类调用私有的方法,就可以利用 Java 中提供的反射来实现。
白鹿第一帅
2022/05/08
2.5K0
Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?
Odoo 通过Javascript调用模型中自定义方法
那问题来了,如果希望在普通的javascript函数中使用上述请求功能,咋办?参考如下示例代码
授客
2023/02/26
1.4K0
点击加载更多

相似问题

TypeError:“tuple”对象在尝试调用方法时不可调用

10

类方法TypeError "Int对象不可调用“

16

TypeError:对象不可调用

21

TypeError:“a”对象不可调用

11

TypeError TypeError:“NoneType”对象不可调用

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档