python tkinter 获取控件类型

问题:
我最近在写一个程序,需要判断控件的类型(例:是Button还是Label)
代码如下:

from msilib.text import tables
import tkinter as tk
import sys
import os
import threading as tg
import time
#import threading as tg
#import time as te
c=tk.Tk()
c.title("pythonGUI制作器")
t="#123456"
c.wm_attributes('-transparentcolor',t)
c['bg']="#ffffff"
#数值
fz=tk.IntVar()
zf=tk.IntVar()
jzz=tk.IntVar()
jzz.set("加载中")
ks={"frame":"",}
b=1
#回调函数
def jz():
    j=tk.Label(rkb,textvariable=jzz,bg="#eeeeee")
    j.place(x=128,y=313)
    while b==1:
        time.sleep(0.1)
        jzz.set("加载中.")
        time.sleep(0.1)
        jzz.set("加载中..")
        time.sleep(0.1)
        jzz.set("加载中...")
        time.sleep(0.1)
        jzz.set("加载中....")
        time.sleep(0.1)
        jzz.set("加载中.....")
        time.sleep(0.1)
        jzz.set("加载中")
    j.destroy()
t=tg.Thread(target=jz)
def tjz():
    global t
    t=tg.Thread(target=jz)
    t.start()
def gc():
    sys.exit()
def sj():#显示时间线
    pass
def zb():#自动保存
    pass
def kj(k,key,command):#快捷键回调函数
    def k():
        command()
    k.bind_all(key,k)
def ks(frame,k=False):
    global b
    if k==False:
        tk.Label(frame,text="您并没有选择控件",bg="#eeeeee").place(x=100,y=313)
    elif k=='<tkinter.Button object .!button>':
        tk.Label(frame,text="控件为Button",bg="#eeeeee").place(x=100,y=313)
    b=0
def ancl():#选择控件
    xc=tk.Toplevel()
    xc.geometry("380x170+{0}+{1}".format(xc.maxsize()[0]//2-250,xc.maxsize()[1]//2-100))
    tk.Button(xc,text="Label\n(输入框)",bd=0).grid(row=0,column=0)
    tk.Button(xc,text="Button\n(按钮)",bd=0).grid(row=0,column=1)
    tk.Button(xc,text="Entry\n(输入框小)",bd=0).grid(row=0,column=2)
    tk.Button(xc,text="Text\n(输入框大)",bd=0).grid(row=0,column=3)
    tk.Button(xc,text="Frame\n(容器)",bd=0).grid(row=0,column=4)
    tk.Button(xc,text="Canvas\n(画布)",bd=0).grid(row=1,column=0)
    tk.Button(xc,text="Checkbutton\n(复选框)",bd=0).grid(row=1,column=1)
    tk.Button(xc,text="Listbox\n(列表框)",bd=0).grid(row=1,column=2)
    tk.Button(xc,text="Menu\n(菜单)",bd=0).grid(row=1,column=3)
    tk.Button(xc,text="Checkbutton\n(右键菜单)",bd=0).grid(row=1,column=4)
    tk.Button(xc,text="Menubutton\n(下拉框)",bd=0).grid(row=2,column=0)
    tk.Button(xc,text="Message\n(消息框)",bd=0).grid(row=2,column=1)
    tk.Button(xc,text="Radiobutton\n(单选框)",bd=0).grid(row=2,column=2)
    tk.Button(xc,text="Scale\n(滑块)",bd=0).grid(row=2,column=3)
    tk.Button(xc,text="Scrollbar\n(滚动条)",bd=0).grid(row=2,column=4)
    tk.Button(xc,text="Toplevel\n(顶级窗口)",bd=0).grid(row=3,column=2)
    xc.mainloop()
#菜单栏
md=tk.Menu(c,bg="#f1f1f1")
mw=tk.Menu(md,bg="#ffffff",tearoff=False)
md.add_cascade(menu=mw,label="文件")
mw.add_cascade(label="打开")
mw.add_cascade(label="新建")
mw.add_cascade(label="保存")
mw.add_radiobutton(label="自动保存",command=zb)
mw.add_cascade(label="另保存")
mb=tk.Menu(md,bg="#ffffff",tearoff=False)
md.add_cascade(menu=mb,label="编辑")
mb.add_cascade(label="撤回")
mb.add_cascade(label="还原")
mb.add_cascade(label="查找")
mb.add_cascade(label="替换")
mc=tk.Menu(md,bg="#ffffff",tearoff=False)
md.add_cascade(menu=mc,label="窗口")
mc.add_cascade(label="关闭程序",command=gc)
mc.add_cascade(label="最小化程序")
mg=tk.Menu(md,bg="#ffffff",tearoff=False)
mc.add_cascade(menu=mg,label="GUI")
mg.add_cascade(label="测试GUI")
mg.add_cascade(label="关闭GUI")
mg.add_cascade(label="重启GUI")
c['menu']=md
#控件栏和更改栏
#容器创建
rk=tk.Frame(c,bg="#ffffff",width=306,height=666)
h=tk.Canvas(rk,bd=0,highlightthickness=0,width=307,height=640,bg="#ffffff")
rkx=tk.Frame(h,bg="#ffffff",width=306,height=640)
h.create_window(0,0,window=rkx,anchor='nw')
rkg=tk.Frame(rk,bg="#eeeeee",width=306,height=26)
rkg.place(x=0,y=0)
h.place(x=0,y=26)
rk.place(x=0,y=0)
#更改栏控件
bxk=tk.Button(rkg,bd=0,text="新建控件",bg="#eeeeee",command=ancl)
bks=tk.Button(rkg,text="刷新",bd=0,bg="#eeeeee")
bkj=tk.Checkbutton(rkg,text="时间线",bg="#eeeeee",bd=0,variable=fz,command=sj)
bkj.place(x=95,y=1)
bks.place(x=65,y=1)
bxk.place(x=5,y=1)
#控件栏控件
g=tk.Scrollbar(h,bd=0,bg="#ffffff")
g.config(command=h.yview)
h.config(yscrollcommand=g.set)
g.place(x=290,y=0,height=640)
#控件编辑栏
#创建容器
rkb=tk.Frame(c,bd=0,width=256,height=666,bg="#eeeeee")
rkb.place(x=1110,y=0)
#编辑栏控件
#t.start()
tjz()
ks(frame=rkb)
c.mainloop()

谢谢大家帮助!

用 type 函数。


import tkinter as tk
root=tk.Tk()
btn=tk.Button(root)
print(type(btn))#output: tkinter.Button

这个项目似乎太难了,建议你先换一个简单的(如:计算器)。

可以这样:

import tkinter as tk
c=tk.Tk()
if type(c) is tk.Tk:
  print("它是tk.Tk")
else:
   print("他不是tk.Tk")