微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么第一个代码运行而第二个代码在定义后没有运行?

如何解决为什么第一个代码运行而第二个代码在定义后没有运行?

一个代码完全正常。

  • 一个代码

     from tkinter import *
     from tkinter import ttk
    
    
     win=Tk()  
     add=StringVar()
     sub=StringVar()
     pro=StringVar()
    
     def Find():
         add.set(float(ent00.get())+float(ent01.get()))
         sub.set(float(ent00.get())-float(ent01.get()))
         pro.set(float(ent00.get())*float(ent01.get()))
    
     ent00=Entry(win,width=15)
     ent00.grid(row=4,column=1,padx=10,pady=10,sticky='w')
     ent01=Entry(win,width=15)
     ent01.grid(row=5,sticky='w')
    
     lbl8=Label(win,text="Add",bg="crimson",fg="white",font=("times new roman",15,"bold")).grid(row=6,column=0,padx=20,sticky='w')
     ent8=Entry(win,textvariable=add,width=15,state='readonly')
     ent8.grid(row=6,sticky='w')
    
     lbl15=Label(win,text="Subtract","bold")).grid(row=7,sticky='w')
     ent15=Entry(win,textvariable=sub,state='readonly')
     ent15.grid(row=7,sticky='w')
    
     lbl9=Label(win,text="Product","bold")).grid(row=8,sticky='w')
     ent9=Entry(win,textvariable=pro,state='readonly')
     ent9.grid(row=8,sticky='w')
    
     btn = Button(win,text = 'Calculate',command=Find,bd = '5',height=2)
     btn.grid(row=11,pady=10)
    
     win.geometry("1400x700+250+250")
     win.mainloop()
    

但是当我定义它时,即使它成为一个函数(如下面的代码所示),它不起作用。它甚至没有显示任何错误。我不明白这个问题的原因。

  • 第二个代码

     from tkinter import *
     from tkinter import ttk
    
     win=Tk()  
    
     def code():
         win=Tk()  
         add=StringVar()
         sub=StringVar()
         pro=StringVar()
    
         def Find():
             add.set(float(ent00.get())+float(ent01.get()))
             sub.set(float(ent00.get())-float(ent01.get()))
             pro.set(float(ent00.get())*float(ent01.get()))
    
         ent00=Entry(win,width=15)
         ent00.grid(row=4,sticky='w')
         ent01=Entry(win,width=15)
         ent01.grid(row=5,sticky='w')
    
         lbl8=Label(win,sticky='w')
         ent8=Entry(win,state='readonly')
         ent8.grid(row=6,sticky='w')
    
         lbl15=Label(win,sticky='w')
         ent15=Entry(win,state='readonly')
         ent15.grid(row=7,sticky='w')
    
         lbl9=Label(win,sticky='w')
         ent9=Entry(win,state='readonly')
         ent9.grid(row=8,sticky='w')
    
         btn = Button(win,height=2)
         btn.grid(row=11,pady=10)
    
         win.geometry("1400x700+250+250")
         win.mainloop()
    
     btn1 = Button(win,text = 'OPEN CODE',command=code,width=20,height=2)
     btn1.grid(row=11,pady=10)
     win.geometry("1400x700+250+250")
     win.mainloop()
    

我是否有任何错误导致其无法正常工作? ______________________

解决方法

您正在重新定义 win,然后对其执行操作,这似乎不太合适。如果你想清除屏幕并放置新的小部件,我会这样做:

from tkinter import *
from tkinter import ttk

win=Tk()  

def code():
    btn1.destroy()
    add=StringVar()
    sub=StringVar()
    pro=StringVar()

    def Find():
        add.set(float(ent00.get())+float(ent01.get()))
        sub.set(float(ent00.get())-float(ent01.get()))
        pro.set(float(ent00.get())*float(ent01.get()))

    ent00=Entry(win,width=15)
    ent00.grid(row=4,column=1,padx=10,pady=10,sticky='w')
    ent01=Entry(win,width=15)
    ent01.grid(row=5,sticky='w')

    lbl8=Label(win,text="Add",bg="crimson",fg="white",font=("times new roman",15,"bold")).grid(row=6,column=0,padx=20,sticky='w')
    ent8=Entry(win,textvariable=add,width=15,state='readonly')
    ent8.grid(row=6,sticky='w')

    lbl15=Label(win,text="Subtract","bold")).grid(row=7,sticky='w')
    ent15=Entry(win,textvariable=sub,state='readonly')
    ent15.grid(row=7,sticky='w')

    lbl9=Label(win,text="Product","bold")).grid(row=8,sticky='w')
    ent9=Entry(win,textvariable=pro,state='readonly')
    ent9.grid(row=8,sticky='w')

    btn = Button(win,text = 'Calculate',command=Find,bd = '5',height=2)
    btn.grid(row=11,pady=10)


btn1 = Button(win,text = 'OPEN CODE',command=code,width=20,height=2)
btn1.grid(row=11,pady=10)
win.geometry("1400x700+250+250")
win.mainloop()

我刚刚删除了 win 函数中修改 code 的三行,并添加了 btn1.destroy(),它从窗口中删除了我们想要停止显示的按钮。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。