Variable类的父级是否必须是Tk实例?

时间:2018-01-25 17:44:40

标签: python tkinter

我见过的大多数示例中的Variable classes都是在没有显式父级(例如(function (exports, require, module, __filename, __dirname) { import * as Web3 from 'web3'; ^^^^^^ SyntaxError: Unexpected token import at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:607:28) at Object.Module._extensions..js (module.js:654:10) at Module.load (module.js:556:32) at tryModuleLoad (module.js:499:12) at Function.Module._load (module.js:491:3) at Function.Module.runMain (module.js:684:10) at startup (bootstrap_node.js:187:16) at bootstrap_node.js:608:3 )的情况下实例化的,我认为大多数其他小部件(如果不是全部)都默认为当前var = tk.StringVar()实例,通常放在变量Tk中。这就是为什么我不确定它的父母是否只需要(通常是当前的,唯一的)root实例,或者它是否可以任何小部件。

变量类的父级是否必须是Tk实例?另外,下面这个类的任何属性有什么问题吗?:

Tk

2 个答案:

答案 0 :(得分:1)

它可以是任何小部件,但除了根小部件之外,它没有任何优势。 select CVID, CID, sum(case when QID = 67554 then LCD else 0 end) as [67554], sum(case when QID = 67555 then LCD else 0 end) as [67555], sum(case when QID = 67556 then LCD else 0 end) as [67556], sum(case when QID = 67557 then LCD else 0 end) as [67557] from test1 group by CVID, CID; 类(从Variable等继承)的实现只是使用给定的master来查找根窗口。根窗口是它实际关注的全部内容,一旦它知道根窗口,它就不会使用主窗口进行其他任何操作。

答案 1 :(得分:0)

,父母不需要成为Tk实例。

source code中所有上述类及其超类Variable的文档字符串中,有一行:

...
    def __init__(self, master=None, value=None, name=None):
        """Construct a string variable.

        MASTER can be given as master widget.
...

其中我假设MASTER引用了参数master,表明master可能是一个虚构的小部件,所以我假设master为变量类可以成为任何小部件。

我认为任何变量类实例都没有任何错误,尽管有些可能过于明确,而且在大多数情况下大多数都是冗余的。

话虽如此,在提供的代码中,虽然所有这些都没问题(小部件无论如何都不能存在Tk实例),我相信self.var1 = tk.BooleanVar(self)是最好的结构根据OOP实例化它的方法,因为它允许最多self - 包含的方法:

try:
    import tkinter as tk
except:
    import Tkinter as tk


class MyEntry(tk.Entry):
    def __init__(self, master, *args, **kwargs):
        tk.Entry.__init__(self, master, *args, **kwargs)

        self.var1 = tk.BooleanVar(self)


if __name__ == '__main__':
    root = tk.Tk()
    entry = MyEntry(root)
    entry.pack()
    root.mainloop()