如何将“自”返回值保存到类B中的变量中:当类B获得由类C返回的值时,保存到类A

时间:2018-06-21 09:11:19

标签: python oop tkinter

首先是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

1 个答案:

答案 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方法添加到我的示例中。