未在tkinter python上分配全局变量

时间:2018-07-22 16:08:08

标签: python python-3.x tkinter global-variables

我正在一个项目中尝试获取文件目录。我在将目录分配给全局变量时遇到问题,因此...

这是我的尝试:

dir = None
def print_dir(event):
    print(dir)

def main:
    root = Tk()
    def get_dir(event):
        ftypes = [('PDF',"*.pdf")]
        root.fileName = askopenfilename(filetypes = ftypes)
        dir = root.fileName
        return
     btn = Button(root,   text="+  Get dir")
     btn.grid(row=3, column=6)
     btn.bind("<Button-1>", get_dir)

     btn_two = Button(root,   text="+  Print dir")
     btn_two.grid(row=3, column=6)
     btn_two.bind("<Button-1>", print_dir)

     root.mainloop()

即使使用第一个按钮打开目录文件,也不会打印任何内容。

1 个答案:

答案 0 :(得分:0)

对于您为什么要在print_dir()之外定义函数main()和在get_dir()内定义函数main()的原因,我不清楚。根本没有道理。

但是;您可以在函数folder中为变量get_dir()分配一个值,该值在本地范围内。退出函数时,变量将被垃圾回收。如果在更广泛的范围内定义,Python将使用变量folder

这可能有用。

from tkinter import *
from tkinter.filedialog import *

folder = None
def print_dir(event):
    print(folder)

def main():
    global folder   # Making variable "folder" global
    root = Tk()
    def get_dir(event):
        global folder   # Making variable "folder" global
        ftypes = [('PDF',"*.pdf")]
        root.fileName = askopenfilename(filetypes = ftypes)
        folder = root.fileName
        return

    btn = Button(root, text="+  Get dir")
    btn.grid(row=2, column=6)
    btn.bind("<Button-1>", get_dir)

    btn_two = Button(root, text="+  Print dir")
    btn_two.grid(row=3, column=6)
    btn_two.bind("<Button-1>", print_dir)

    root.mainloop()

main()