如何使用按钮在TKINTER窗口中绘制标签



我希望在单击按钮上显示标签,然后下载应启动。但是在下面的情况下,框架被卡住了,说如果下载需要10分钟,它就会卡住,并且该标签仅在10之后显示。

def call():
 test1()
 test2()
def test1():
 button.pack_forget()
 label.pack()
def test2(): 
 "script to start download which might take 10 min"
frame=Tk()
frame.pack()
button=Button(frame,text="clickme",command=call)
label=Label(frame,text="downloading...Please wait")
button.pack()
frame.mainloop()

.pack_forget()有时可能会有些麻烦。就我个人而言,我更喜欢将所有东西都包装到一种次级主机框架中,这是Tk()窗口中唯一的直接孩子,所有内容都是次主机框架的孩子。

似乎您还忘记了将变量传递给call(),然后将变量传递给test1。由于您的标签和按钮是局部变量而不是全局变量,因此您将无需将它们传递到例程而无法绘制或销毁它们。要在TKINTER按钮命令系统的约束中执行此操作,您需要使用函数lambda:(如下所示)。

因此,在您的代码中,类似的内容:

from tkinter import *
def Call(frame, mainframe, label):
    test1(frame, mainframe, label)
    test2()
def test1(frame, mainframe, label)
    mainframe.destroy()
    mainframe = Frame(frame)
    label.pack()
def test2()
    print("Only here so the program can be copied straight from SO")
    #Blegh, download stuff
frame = Tk()
mainframe = Frame(frame) #This is the sub-master frame
button = Button(mainframe, text="clickme", command=lambda:Call(frame, mainframe, label) #Using lambda here allows you to pass parameters to the definition within Tkinters buttons command restraints
label = Label(mainframe, text="downloading . . . Please wait")
button.pack()
frame.mainloop()

此代码将以按下按钮擦除屏幕上的按钮并打包要打包的标签,如果您出于任何原因保留按钮,则仅通过添加行来修改 test1()button.pack()并确保您也将变量作为参数传递。

最新更新