【发布时间】:2020-07-21 00:10:56
【问题描述】:
目前我正在尝试销毁顶层窗口(如果它在那里,如果不创建它)并在其位置生成一个新窗口。
当前创建窗口的按钮会创建一个带有标签的小窗口,该窗口仅显示基于 GUI 上用户输入的命令行。
但是,我尝试了谷歌搜索和大量不同的方法,但我无法让它破坏窗口并创建一个新窗口。
def view_command(): # Views Command
cmd_line_window = Toplevel()
cmd_line_window.title('Command Line')
cmd_line_window.configure(background="#434547")
#doing stuff here#
cmd_label = Label(cmd_line_window, text=example_cmd_output, foreground="white",
background="#434547")
cmd_label.config(font=("Helvetica", 16))
cmd_label.pack()
btn = Button(root, text="Click Me", command=view_command)
我尝试了一些if 语句,一些try 语句,但我似乎无法让它正常工作。我觉得有一种简单的方法可以在一个函数中执行此操作,但是我似乎无法理解。
编辑:目前,每次我单击按钮时,它都会更新我选择的所有变量并显示正确的内容,它只会不断生成更多带有更新标签的窗口。
Edit2:我使用了来自 cmets 的建议和底部的答案,以获得两全其美的效果。这是我的代码,它会打开一个窗口或根据窗口是否已经打开来更新标签!
def view_command():
global cmd_label
example_cmd_output = acodec_stream_choices[acodec_stream.get()] \
+ encoder_dropdownmenu_choices[encoder.get()] + \
acodec_bitrate_choices[acodec_bitrate.get()] + \
acodec_channel_choices[acodec_channel.get()] + \
acodec_samplerate_choices[acodec_samplerate.get()] + \
acodec_gain_choices[acodec_gain.get()] + ac3_custom_cmd_input + ac3_title_input
try:
cmd_label.config(text=example_cmd_output)
except (AttributeError, NameError):
cmd_line_window = Toplevel()
cmd_line_window.title('Command Line')
cmd_line_window.configure(background="#434547")
cmd_label = Label(cmd_line_window, text=example_cmd_output, foreground="white", background="#434547")
cmd_label.config(font=("Helvetica", 16))
cmd_label.pack()
btn = Button(root, text="Click Me", command=view_command)
【问题讨论】:
-
在当前
Toplevel实例上调用.destroy()方法。 -
-
您想破坏
Toplevel()并创建一个新的吗?或者当按下按钮时,你想检查是否存在任何顶层然后删除所有现有的顶层?你能解释一下吗 -
你可以只更新标签文本而不是破坏和创建窗口吗?
-
@CoolCloud 是的,我有一个窗口,有几个下拉菜单等,一旦用户完成他们的选择,就会有一个按钮允许他们查看他们选择的命令行。当他们按下此按钮时,会打开一个窗口,其中包含基于他们选择的标签。如果他们更改设置并再次按下它,我希望它删除那里的窗口并打开一个新窗口。 acw1668 我想这可以正常工作,只要它首先打开带有标签的小窗口并在每次按下时更新标签。它需要检查窗口是否在那里,如果没有打开它。