在 Python tkinter 应用程序中重新单击执行按钮时如何清除输出

问题描述

我用 Python tkinter 包制作了一个简单的 GUI 应用程序。

该应用允许我们输入一些化学式,然后检查它是否存在。

但是,当我多次使用输入时,输出窗口中的历史结果是重叠的。这是一个例子。

enter image description here

代码也提供如下。

import tkinter as tk

root= tk.Tk()
root.title('Peak fitting assistant')

canvas1 = tk.Canvas(root,width = 400,height = 300,relief = 'raised')
canvas1.pack()

label1 = tk.Label(root,text='Check if the candidate ions make sense')
label1.config(font=('helvetica',14))
canvas1.create_window(200,25,window=label1)

label2 = tk.Label(root,text='Type the chemical formula:')
label2.config(font=('helvetica',10))
canvas1.create_window(200,100,window=label2)

entry1 = tk.Entry (root) 
canvas1.create_window(200,140,window=entry1)

def formula_check():
    s = entry1.get()   
    label3 = tk.Label(root,text= s + ' is:',font=('helvetica',10))
    canvas1.create_window(200,210,window=label3)

    label4 = tk.Label(root,text= out,9,'bold')) ## out is the result,the checking process is not relevant to the error here.
    canvas1.create_window(200,230,window=label4)

button1 = tk.Button(text='Check',command=formula_check,bg='brown',fg='white',10,'bold'))
button1.pack()
canvas1.create_window(200,180,window=button1)

root.mainloop()

我尝试添加下面的句子,即,在出现重叠问题的情况下,在下一次执行之前销毁输出

label3 = tk.Label(root)
label4 = tk.Label(root)

def formula_check():
    global label3,label4
    label3.destory()
    label4.destory()

但是,它当时不起作用。我想咨询一下点击“检查”按钮时如何清除输出

解决方法

好吧,您可以使用 .config 来配置文本。

label3 = Label(root,font=('helvetica',9,'bold'))    # Create the label outside the function.
label3.pack()

def formula_check():
    s = entry1.get()
    label3.config(text=s)    # This will change the text of the Label instead of overriding it by a new Label instance.
button1 = tk.Button(text='Check',command=formula_check)
button1.pack()
,

问题是您在预览窗口上创建了一个新的画布窗口,并且由于新窗口比以前小,您还看到了预览窗口。 解决此问题的一种方法是创建一个画布窗口,标记此窗口并更新其中的文本。

下面是代码在第 19 和 20 行创建窗口,并在第 25 和 28 行更新:

  1 import tkinter as tk
  2 
  3 root= tk.Tk()
  4 root.title('Peak fitting assistant')
  5 
  6 canvas1 = tk.Canvas(root,width = 400,height = 300,relief = 'raised')
  7 canvas1.pack()
  8 
  9 label1 = tk.Label(root,text='Check if the candidate ions make sense')
 10 label1.config(font=('helvetica',14))
 11 canvas1.create_window(200,25,window=label1)
 12 
 13 label2 = tk.Label(root,text='Type the chemical formula:')
 14 label2.config(font=('helvetica',10))
 15 canvas1.create_window(200,100,window=label2)
 16 
 17 entry1 = tk.Entry (root)
 18 canvas1.create_window(200,140,window=entry1)
 19 canvas1.create_window(198,210,tags=('some_tag_here'))
 20 canvas1.create_window(200,230,tags=('other_tag_here'))
 21 
 22 def formula_check():
 23     s = entry1.get()
 24     label3 = tk.Label(root,text= s + ' is:',10))
 25     canvas1.itemconfigure('some_tag_here',window=label3)
 26 
 27     label4 = tk.Label(root,text= out,'bold')) ## out is the result,the checking process is not relevant to the error here.
 28     canvas1.itemconfigure('other_tag_here',window=label4)
 29 
 30 button1 = tk.Button(text='Check',command=formula_check,bg='brown',fg='white',10,'bold'))
 31 button1.pack()
 32 canvas1.create_window(200,180,window=button1)
 33 
 34 root.mainloop()

PS:第 27 行的错误是因为你没有声明“out”变量。