【发布时间】:2014-12-04 01:38:39
【问题描述】:
我已经尝试寻找了一段时间,但没有找到,如果之前有人问过这个问题,请原谅我。希望我能很好地解释我想要实现的目标。
我正在尝试为我的工作室创建一个用于资产管理的简单 GUI,但在使用 Tkinter 的 Spinbox 时遇到了一些问题,特别是与它有依赖关系。我们有一个特定的文件结构(出于测试目的,大约有 4 个文件夹深)用于组织各种资产。作为一个整体,我对 Tkinter 有点陌生,但我现在已经为测试目的创建了足够好的 GUI(请指导我纠正你可能看到的任何错误。)
就目前而言,打开时我有两个 Spinbox 以及我的按钮。第一个 Spinbox 按预期执行,但是当我尝试让第二个 Spinbox 显示第一个 Spinbox 中选择的值时遇到问题。第二个 Spinbox 只想显示层次结构中的第一个文件夹,而不是显示该目录中的所有文件夹(也不是它们的后续子文件夹)。我怎样才能让第二个 Spinbox 也向我显示其他文件夹并随着第一个 Spinbox 的变化而更新?我基本上需要它来动态填充和重新填充,因为第一个旋转框中的选项发生了变化。我在下面粘贴了我的代码。任何帮助将不胜感激。 :)
import os
import Tkinter as tk
mainpath = "C:\\"
def mywindow():
top = tk.Tk()
top.wm_title("Muse Asset Manager v01.00")
top.geometry("+825+500")
frame = tk.Frame(top)
spin01 = tk.Spinbox(frame, values = ([i for i in os.listdir(mainpath)]), wrap = True, state = "readonly")
def secondspincommand():
newspin01 = spin01.get()
myspin = [i for i in os.listdir(mainpath + str(newspin01))]
print myspin
spin02.config(values = myspin)
spin02 = tk.Spinbox(frame, values = "", wrap = True, state = 'readonly', command = secondspincommand)
b1 = tk.Button(frame, text = "Import")
def button01():
print secondpath
top.destroy()
return
b1.configure(command = button01)
spin01.grid(row=1)
spin02.grid(row=2)
b1.grid(row=3)
frame.pack()
frame.mainloop()
mywindow()
为清晰起见进行了编辑,并将代码变成了一个最小的、完整的、可验证的示例
【问题讨论】:
-
您能否将其简化为 minimal, complete, verifiable example,我们可以在无需将您的 Y: 驱动器连接到我们的系统的情况下运行它吗?
-
另外,这里到底出了什么问题?您将用于填充第二个 spinbox 的代码放入第二个 spinbox 的命令而不是第一个的命令中,这似乎很奇怪。是这个问题吗?
-
或者“层次结构中的第一个文件夹而不是所有文件夹”意味着您希望在第一个旋转框中选择的目录下递归地填充所有文件,而不仅仅是那些直接在那个目录?
-
你好 abarnert。我正在努力将其简化为最小、完整且可验证的代码。我很抱歉。后者,我需要在第一个 spinbox 中的选定目录下递归地填充第二个 spinbox 中的所有文件,并随着第一个 spinbox 的变化而更新。现在,我只是在第一个 spinbox 的选定目录中获取第一个文件夹。
标签: python user-interface dynamic tkinter dependencies