【问题标题】:Python: Button widget in TkinterPython:Tkinter 中的按钮小部件
【发布时间】:2015-09-21 11:20:50
【问题描述】:

我刚刚开始使用 Tkinter 在 Python 2.7 中进行 GUI 编程。

我想要一个按钮Browse,单击该按钮可打开Windows 文件资源管理器并将所选文件的路径返回给变量。我希望稍后使用该路径。

我正在遵循here 给出的代码。它输出一个显示 5 个按钮的窗口,但这些按钮什么也不做。单击第一个按钮时,它不会打开选定的文件。

同样,在点击第二个按钮时,askopenfilename(self) 函数被调用并且它应该返回一个文件名。就像我提到的,我稍后需要那个文件名。

如何将函数返回的值放入某个变量中以备将来使用?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    在按钮的回调中使用return 是没有意义的。它不会回到任何地方。回调保存数据的方法是将其存储在全局变量中,如果您使用类,则将其存储在实例变量中。

    def fetchpath():
        global filename
        filename = tkFileDialog.askopenfilename(initialdir = 'E:')
    

    FWIW(与问题无关):您犯了一个非常常见的错误。在 python 中,当您执行foo=bar().baz() 时,foo 会采用baz() 中的值。因此,当你这样做时:

    button = Button(...).pack()
    

    button 将采用pack() 的值,它总是返回None。如果您希望保存对正在创建的小部件的实际引用,则应该将小部件创建与小部件布局分开。即使你不是,将两者分开也是一个好习惯。

    【讨论】:

    • 我纠正了pack 的错误。我还是不能用global filenameNameError: global name 'filename' is not defined
    • @Nancy:您的程序中肯定有其他错误。你不应该得到那个错误,但是没有看到我什至猜不到的代码。
    • 我的错误。现在明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多