吃吃753 2022-07-21 10:55 采纳率: 58.8%
浏览 54
已结题

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()

  • 写回答

1条回答 默认 最新

  • Smart-Space 2022-07-21 11:05
    关注

    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()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月29日
  • 已采纳回答 7月21日
  • 创建了问题 7月21日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂