【问题标题】:Error with python3 tkinterpython3 tkinter 出错
【发布时间】:2018-04-01 01:25:19
【问题描述】:

这是来自 Python3.6Ubuntu 17.10

的 mi 代码

它是用 Atom 编写的,将在 Jupyter 上实现 笔记本

from tkinter import *
from tkinter import ttk

这里开始错误

 class Aplicacion():
        def __init__(self):
            self.root = Tk()
            self.root.geometry('300x200')
            self.root.resizable(width = False, height = False)
            self.root.configure(bg = 'red')
            self.root.title('Cachonerismo')
            self.nombre = StringVar()
            self.respuesta = StringVar()
            self.txt = ttk.Entry(self.root,textvariable = self.nombre)
            self.txt.pack(side = TOP)
            self.txt1 = ttk.Entry(self.root, textvariable = self.respuesta)
            self.txt1.pack(side = BOTTOM)
            self.btn = ttk.Button(self.root, text = 'Mostrar', command = self.saluda).pack(side = LEFT)
            self.bcl = ttk.Button(self.root, text='Cerrar', command = self.root.destroy).pack(side = RIGHT)
            self.root.mainloop()

        def saluda(self):

            self.a = self.nombre.get(self)
            self.respuesta.set(a)


    app = Aplicacion()

这是我得到的错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1702, in __call__
    return self.func(*args)
  File "tkinterTest.py", line 23, in saluda
    self.a = self.nombre.get(self)
TypeError: get() takes 1 positional argument but 2 were given

【问题讨论】:

  • StringVar 更改为StringVar()
  • 谢谢,但现在我在 Tkinter 回调 Traceback 中收到此错误异常(最近一次调用最后一次):文件“/usr/lib/python3.6/tkinter/__init__.py”,第 1702 行,在 call return self.func(*args) File "tkinterTest.py", line 23, in saluda a = self.nombre.get(self) TypeError: get() 接受 1 个位置参数,但给出了 2 个

标签: python python-3.x class object tkinter


【解决方案1】:

这是the chunk of code 失败:

class StringVar(Variable):
    """Value holder for strings variables."""
    _default = ""
    def __init__(self, master=None, value=None, name=None):
        """Construct a string variable.
        MASTER can be given as master widget.
        VALUE is an optional value (defaults to "")
        NAME is an optional Tcl name (defaults to PY_VARnum).
        If NAME matches an existing variable and VALUE is omitted
        then the existing value is retained.
        """
        Variable.__init__(self, master, value, name)

    def get(self):
        """Return value of variable as string."""
        value = self._tk.globalgetvar(self._name)
        if isinstance(value, str):
            return value
        return str(value)

你必须“调用”类来实例化它:

self.nombre = StringVar()
self.respuesta = StringVar()

【讨论】:

  • 更改get(self) => get()。任何时候调用X.some_function()X 都会自动作为第一个位置参数传递给函数。
  • 谢谢老兄,我不敢相信这是这么愚蠢的事
  • “您必须调用该类以使用变量类型的参数对其进行实例化” - 该语句不正确。您根本不需要提供任何参数来实例化它。正如您在发布的代码中看到的那样,mastervaluename 都是可选的。
  • 啊,你是对的,我忘了它继承自 Variable - 将修复
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多