从框架继承的类中的对象的实例属性,如何检查小部件的类型

时间:2019-07-15 12:11:13

标签: python tkinter attributes

我的代码是:

from tkinter import *

class Inter(Frame):

    def __init__(self, fenetre, **kwargs):
        Frame.__init__(self, window, width=768, height=576, **kwargs)
        self.pack(fill=BOTH)
        self.compt= 0

        self.message = Label(self, text="No click")
        self.message.pack()

        self.button_quit = Button(self, text="Quit", command=self.quit)
        self.button_quit.pack(side="left")

        self.button_click = Button(self, text="Click", fg="red",
                command=self.click)
        self.button_click.pack(side="right")

    def click(self):

        self.compt += 1
        self.message["text"] = " number of clicks={}".format(self.compt)

我已经创建了对象

top= Tk()
interface = Inter(top)

interface.mainloop()
interface.destroy()

我尝试了vars()__dict__方法,但是我将对象'interface'的实例属性(即小部件名称)作为str。因此,我无法使用.winfo_class(方法)检查​​小部件是按钮还是标签。

2 个答案:

答案 0 :(得分:0)

您可以像比较任何其他python对象一样简单地比较对象类型:

>>> isinstance(self.button_click, Tkinter.Button)
True

您要查找的方法是 winfo_children

  

winfo_children()

     

返回一个列表,其中包含该控件所有子级的窗口小部件实例   小部件。窗口以从下到上的堆叠顺序返回。   如果订单无关紧要,您可以从   children小部件属性(这是映射Tk小部件名称的字典   小部件实例,因此widget.children.values()为您提供了   实例)。

     

语法root.winfo_children()

答案 1 :(得分:0)

如果您要检查interface中儿童的课程

for name in interface.children:

    widget = interface.nametowidget(name)

    print(name, 'is Button:', isinstance(widget, tkinter.Button))
    print(name, 'is Label:',  isinstance(widget, tkinter.Label))

    print(name, 'is Button:', widget.winfo_class() == "Button")
    print(name, 'is Label:',  widget.winfo_class() == "Label")