繁体   English   中英

如何销毁 tkinter 框架?

[英]How do I destroy a tkinter frame?

我正在尝试制作一个包含输入字段和提交按钮的 tkinter 框架。 当按下提交按钮时,我想将输入字符串传递给程序并销毁框架。 经过多次实验,我想出了这个脚本:

from tkinter import *
from tkinter import ttk
import time

root = Tk()
entryframe = ttk.Frame(root)
entryframe.pack()
par = StringVar('')
entrypar = ttk.Entry(entryframe, textvariable=par)
entrypar.pack()
submit = ttk.Button(entryframe, text='Submit', command=entryframe.quit)
submit.pack()
entryframe.mainloop()
entryframe.destroy()
parval = par.get()
print(parval)
time.sleep(3)
root.mainloop()

当按下“提交”按钮时,参数值将正确传递给脚本并打印。 但是,入口帧仅在 3 秒后被销毁(由 time.sleep 函数设置)。 我想立即销毁入口框架。 我有一个稍微不同的脚本版本,其中入口框架确实立即被破坏(尽管按钮本身没有被破坏),但 par 的值没有打印出来:

from tkinter import *
from tkinter import ttk
import time

root = Tk()
entryframe = ttk.Frame(root)
entryframe.pack()
par = StringVar('')
entrypar = ttk.Entry(entryframe, textvariable=par)
entrypar.pack()
submit = ttk.Button(root, text='Submit', command=entryframe.destroy)
submit.pack()
entryframe.mainloop()
# entryframe.destroy()
parval = par.get()
print(parval)
time.sleep(3)
root.mainloop()

我怎样才能得到这两个动作,即立即销毁入口框架和打印 par 的值?

请注意 100% 确定您要执行的操作,但请查看以下代码:

from tkinter import *
from tkinter import ttk

def print_results():
    global user_input # If you want to access the user's input from outside the function
    # Handle the user's input
    user_input = entrypar.get()
    print(user_input)
    # Destroy whatever you want here:
    entrypar.destroy()
    submit.destroy()
    # If you want you can also destroy the window: root.destroy()

    # I will create a new `Label` with the user's input:
    label = Label(root, text=user_input)
    label.pack()

# Create a tkitner window
root = Tk()

# Create the entry
entrypar = ttk.Entry(root)
entrypar.pack()

# Create the button and tell tkinter to call `print_results` whenever
# the button is pressed
submit = ttk.Button(root, text="Submit", command=print_results)
submit.pack()

# Run tkinter's main loop
# It will stop only when all tkinter windows are closed
root.mainloop()

# Because of the `global user_input` now we can use:
print("Again, user_input =", user_input)

我定义了一个 function 会破坏入口和按钮。 它还创建了一个显示用户输入的新 label。

我能够使用 wait_window 方法完成我想要的。 这是正确的脚本:

from tkinter import *
from tkinter import ttk

root = Tk()
entryframe = ttk.Frame(root)
entryframe.pack()
entrypar = ttk.Entry(entryframe)
entrypar.pack()
submit = ttk.Button(entryframe, text='Submit', command=entryframe.destroy)
submit.pack()
entrypar.wait_window()
parval = entrypar.get()
print(parval)
close_button = ttk.Button(root, text='Close', command=root.destroy)
close_button.pack()
root.mainloop()

我的意图在我最初的问题中并不完全清楚,对此我深表歉意。 无论如何,答案确实让我走上了正轨,我非常感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM