Python的tkinter组合框做四则运算器 为什么root=Tk和下面var=StringVar会报错

from tkinter.ttk import *

def calc(event):
a = float(t1.get())
b = float(t2.get())
dic = {0:a+b,1:a-b,2:a*b,3:a/b}
c = dic[comb.current()]
lbl.config(text=str(c))

root = Tk()
root.title('四则运算')
root.geometry('320x240')

t1 = Entry(root)
t1.place(relx=0.1,rely=0.1,relwidth=0.2,relheight=0.1)

t2 = Entry(root)
t2.place(relx=0.5,rely=0.1,relwidth=0.2,relheight=0.1)

var = StringVar()

comb = Combobox(root,textvariable=var,values=['加','减','乘','除',])
comb.place(relx=0.1,rely=0.5,relwidth=0.2)
comb.bind('<>',calc)

lbl=Label(root,text='结果')
lbl.place(relx=0.5,rely=0.7,relwidth=0.2,relheight=0.3)

root.mainloop()

root = Tk()错误是因为没有导入tkinter的__init__模块:

from tkinter import *
from tkinter import ttk

不建议从ttk中全部导入,或者说可以用import tkinter as tk作为区分。
StringVar不是ttk的类,而是原生tkinter的类。

更改代码如下:

from tkinter.ttk import *
import tkinter as tk

def calc(event):
    a=t1.get()
    b=t1.get()
    if a=='' or b=='':
        return
    a = float(t1.get())
    b = float(t2.get())
    dic = {0:a+b,1:a-b,2:a*b,3:a/b}
    c = dic[comb.current()]
    lbl.config(text=str(c))

root = tk.Tk()
root.title('四则运算')
root.geometry('320x240')

t1 = Entry(root)
t1.place(relx=0.1,rely=0.1,relwidth=0.2,relheight=0.1)

t2 = Entry(root)
t2.place(relx=0.5,rely=0.1,relwidth=0.2,relheight=0.1)

var = tk.StringVar()

comb = Combobox(root,textvariable=var,values=['加','减','乘','除',])
comb.place(relx=0.1,rely=0.5,relwidth=0.2)
comb.bind('<<ComboboxSelected>>',calc)

lbl=Label(root,text='结果')
lbl.place(relx=0.5,rely=0.7,relwidth=0.2,relheight=0.3)

root.mainloop()