首先是OOP编码的新手,很抱歉提出愚蠢的问题。
我在从 Class AskDir 返回的值(如果有道理)从 Class SelectDir 获取的值到 Class MainWindow 时遇到问题>
目前我所拥有的代码可以用其他方法工作,除了我无法保存 Class AskDir()的实际“ self”(即路径“ / home / etc /”)返回值不管我做什么,都会将其更改为另一个变量。
从我已阅读的内容中,我应该可以使用 a = AskDir(self)获得返回值 print(a),但是我得到的却是“。!frame。!functionchangename。!askdir”
因此,简而言之,如何保存来自AskKir类内部函数的实际返回路径,并保存到MainWindow()类中的变量a中?
为了澄清,我想要的是MainWindow()类具有一个变量(a),该变量从Class SelectDir()内的子函数get()获取返回值,并且该值应为 path < / strong> get()函数返回
简化代码:
class MainWindow:
self.controller = controller
# prints the button to this frame!
getdir = AskDir(self)
print(getdir) # this should return actual path (/home/etc/), but it doesnt
class AskDir(tk.Frame):
def __init__(self, container):
tk.Frame.__init__(self, container)
self.selectdir = SelectDir(self, "Select directory",
"/home/user/folder/")
button = tk.Button(frame, text="Select directory",
command=self.select_dir)
self.act_dir = tk.StringVar()
self.act_dir.set("/home/")
def select_dir(self):
self.selectdir.show()
self.act_dir.set(self.selectdir.get())
class SelectDir:
def __init__(self, container, title, initial):
self.master = container
def show(self):
result = filedialog.askdirectory()
if result:
self.selected = result
# THIS RETURNS THE ACTUAL PATH!
def get(self):
return self.selected
答案 0 :(得分:1)
这对您有用吗?
我认为没有必要将SelectDir作为类,因为它的目的只是调用askdirectory
方法并返回选定的文件夹路径,因此我将其更改为函数。
在此示例中,按下“选择目录”按钮将打开目录对话框,然后将所选目录文本放入“条目”小部件中。
如果MainWindow
类希望在设置路径后对其执行任何操作,则只需调用get_dir
的{{1}}方法,例如AskDir
print(askDir.get_dir()
现在您可以在MainWindow中随意使用import tkinter as tk
from tkinter import filedialog
def doStuffFunction(value):
print(value)
class MainWindow(tk.Frame):
def __init__(self,master=None,**kw):
tk.Frame.__init__(self,master=master,**kw)
self.askDir = AskDir(self)
self.askDir.grid()
doStuffButton = tk.Button(self, text="Do Stuff", command=self.doStuff)
doStuffButton.grid()
def doStuff(self):
doStuffFunction(self.askDir.get_dir())
class AskDir(tk.Frame):
def __init__(self, master, **kw):
tk.Frame.__init__(self, master=master,**kw)
button = tk.Button(self, text="Select directory",
command=self.select_dir)
button.grid(row=0,column=1)
self.act_dir = tk.StringVar()
self.act_dir.set("/home/")
self.pathBox = tk.Entry(self, textvariable=self.act_dir,width=50)
self.pathBox.grid(row=0,column=0)
def select_dir(self):
selectdir = SelectDir("Select directory", "/home/user/folder/")
self.act_dir.set(selectdir)
def get_dir(self):
return self.act_dir.get()
def SelectDir(title,initial):
result = filedialog.askdirectory(initialdir=initial,title=title)
return result
if __name__ == '__main__':
root = tk.Tk()
MainWindow(root).grid()
root.mainloop()
类(可以选择“源”和“目标”路径)。这已通过AskDir
中的doStuff
方法添加到我的示例中。