Tkinter:使用类方法从回调中获取返回值?

时间:2017-06-15 23:48:37

标签: python button tkinter

我试图通过避免使用全局变量等来遵循其他相关问题的好建议。我编写了一个类方法来处理TK Button小部件的回调函数。该函数应该从Treeview节点返回路径变量。我可以从函数打印路径,它有我需要的东西,但对于我的生活,我无法弄清楚如何将它返回到我的主要功能。我在Windows 7上使用Python 2.7。不用说,我是初学者。

如何将我的路径从setdir()返回到MAIN,或者如何访问该值?

这是类方法,我不确定或没有帮助的东西被注释掉了。

class sel_dir():

    #@classmethod
    def __init__(self):
        self.path = None
        self.node = None
        self.getbutton()

    def getbutton(self):
        Button(dirbrowse, command=self.setdir, text="SELECT").grid(row=5, column=0, padx=5)
        #return self.path

    def setdir(self):
        self.node = tree.focus()
        if tree.parent(self.node):
            self.path = os.path.abspath(tree.set(self.node, "fullpath"))
            if os.path.isdir(self.path):
                print "PATH from sel_dir.setdir = ", self.path
                dirbrowse.destroy()
                return self.path

这是精简的Main功能:

#!/usr/bin/env python
# coding=utf-8
import os
import glob

from Tkinter import *
from ttk import *

def MAIN():
    global dirbrowse, tree

    dirbrowse = Tk()
    tree = Treeview(dirbrowse)

    # Get path from button click
    result = sel_dir()

    #print result.path

    # Just for debugging
    print vars(result)

    dirbrowse.mainloop()

1 个答案:

答案 0 :(得分:0)

您无法向主要功能返回任何内容 - 它没有调用uuid: "2A4A", // HID Information uuid: "2A33", // Boot Mouse Input Report uuid: "2A4B", // Report Map uuid: "2A4D", // Report uuid: "2A4E", // Protocol Mode result.setdir()。选择按钮并调用dirbrowse.mainloop()后,它将存储在setdir()中。您需要让result.path做更多,或定期检查setdir()的值。您可以使用通用窗口小部件after()方法来执行后者。