我正在尝试使用Tkinter网格的最小GUI来使我的python程序更易于访问。
我创建了一个类,它创建一个按钮,要求选择一个目录。这应该是正常的。但是,我希望将目录的路径镜像到按钮下方的行中。
UIDevice
使用中:
class dir_choice:
def __init__(self, master, text, prow, pcol):
self.dir_button = Button(master, text = text, command = self.askdir)
self.dir_button.grid(row = prow, column = pcol)
self.feedb = Label(master, text = "text")
self.feedb.grid(row = prow+1, column = pcol)
def askdir(self):
name = askdirectory() #from tkFileDialog
return name
而不是dir1 = dir_choice(root, "FOLDER 1", 3, 2)
如果选择了该目录,我希望在按钮下方显示text = "text"
之类的内容。
我认为我不正确,假设它在"C:/user/A/B/C"
变量中,或者如果是,我需要以不同的方式定义它。所以我的问题是如何访问name
函数的值以及如何将该值推送到askdirectory()
标签。
答案 0 :(得分:4)
这可能只是一个复制粘贴错误,但缩进不正确。
PEP-8样式调用了以CamelCase命名的类。它不会让你的代码运行得更快,但可读性很重要。
避免链接几何管理方法。如果将几何方法(例如grid()
)链接到窗口小部件创建上,最终会保存这些方法'返回值始终为None
,因此self.dir_button
和self.feedb
都只是None
。相反,将几何管理方法放在一个单独的行上。
要更改窗口小部件的属性,只需configure()
它(或简称为config()
)。 askdirectory()
返回一个字符串,因此您可以直接使用它或将其保存为self.directory_name
之类的内容。它在return
任何地方都无用,因为该函数是由Button
调用的,而Button
无法对返回的值执行任何操作。
class DirChoice:
def __init__(self, master, text, prow, pcol):
self.dir_button = Button(master, text = text, command = self.askdir)
self.dir_button.grid(row = prow, column = pcol)
self.feedb = Label(master, text = "text")
self.feedb.grid(row = prow+1, column = pcol)
def askdir(self):
self.feedb.config(text= askdirectory()) #from tkFileDialog