Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确覆盖tkinter小部件的配置方法?_Python_Tkinter - Fatal编程技术网

Python 如何正确覆盖tkinter小部件的配置方法?

Python 如何正确覆盖tkinter小部件的配置方法?,python,tkinter,Python,Tkinter,我需要一个条目小部件来保持对其textvariable的引用(因为关联的变量可能在运行时更改) 由于some_entry['textvariable']返回一个无用的字符串,我编写了自己的类 import Tkinter as tk import ttk class MyEntry(ttk.Entry, object): 'entry that keeps a reference to its textvariable' def __init__(self, master, t

我需要一个条目小部件来保持对其textvariable的引用(因为关联的变量可能在运行时更改)

由于
some_entry['textvariable']
返回一个无用的字符串,我编写了自己的类

import Tkinter as tk
import ttk

class MyEntry(ttk.Entry, object):
    'entry that keeps a reference to its textvariable'
    def __init__(self, master, textvariable, *args, **kwargs):
        self.textvariable = textvariable
        super(MyEntry, self).__init__(
            master, *args, textvariable=textvariable, **kwargs)

    def configure(self, *args, **kwargs):
        self.textvariable = kwargs.get('textvariable', self.textvariable)
        return super(MyEntry, self).configure(*args, **kwargs)
这与预期的效果一样:

python -i mcve.py
>>> root = tk.Tk()
>>> var1 = tk.StringVar(value='v1')
>>> var2 = tk.StringVar(value='v2')
>>> e = MyEntry(root, textvariable=var1)
>>> 
>>> e.textvariable.get()
'v1'
>>> e.configure(textvariable=var2)
>>> e.textvariable.get()
'v2'
但是,通过
[]
符号设置textvariable失败

>>> e['textvariable'] = var1
>>> e.textvariable.get()
'v2'
尝试

目前我只是使用

def __setitem__(self, what, value):
    self.configure(**{what:value})

我没有在这里调用超类“
\uuuuu setitem\uuuuu
会把事情搞砸吗?解决方案似乎可行,但我对
Tkinter
内部结构了解不够,无法确信它在某些情况下不会崩溃。

“变量可能会改变”:方法不好,但无论如何,您必须实现才能启用
类MyEntry(
是可订阅的。@stovfl我认为在不了解程序的情况下判断方法是不公平的。根据用户可以设置的选项,该条目绑定到具有不同输入验证(通过
跟踪
)的变量。无论如何,我认为这是
\uuuuu setitem\uuuuuuuuu