【问题标题】:Tkinter Button command return value?Tkinter 按钮命令返回值?
【发布时间】:2013-10-17 08:35:36
【问题描述】:

我无法从 tkinter Button 命令返回变量。这是我的代码:

class trip_calculator:

    def __init__(self):
        file = self.gui()

    def gui(self):
        returned_values = {}

        def open_file_dialog():
            returned_values['filename'] = askopenfilename()

        root = Tk()
        Button(root, text='Browse', command= open_file_dialog).pack()
        filepath = returned_values.get('filename')
        root.mainloop()
        return filepath
        root.quit()

我只想返回一个文本文件的文件路径。 tkinter 窗口已打开,我可以浏览并选择文件,但它不会 return 路径。

【问题讨论】:

  • 从创建按钮到指定filepath 之后的行之间的时间大约是千分之一秒。用户必须有 非常 快速反应才能在那个小机会窗口中浏览打开的文件对话框:-) 我有点过于简单化了,但我的笑话的重点是,不要依赖在 mainloop 之前的任何行出现用户输入。

标签: python button callback tkinter


【解决方案1】:

您的代码现在的方式是,filepath 在您的窗口甚至出现在用户面前之前就被分配了它的值。所以字典不可能包含用户最终选择的文件名。最简单的解决方法是将filepath = returned_values.get('filename') 放在mainloop 之后,这样直到用户关闭窗口时主循环结束时才会分配它。

from Tkinter import *
from tkFileDialog import *

class trip_calculator:

    def gui(self):

        returned_values = {} 

        def open_file_dialog():
            returned_values['filename'] = askopenfilename()

        root = Tk()
        Button(root, text='Browse', command= open_file_dialog).pack()


        root.mainloop()

        filepath = returned_values.get('filename')
        return filepath

        root.quit()

print(trip_calculator().gui())

【讨论】:

  • 嗨,凯文,谢谢。我知道我做错了什么,但是,在 mainloop 之后分配 filepath 没有帮助..如果我只是在返回之前打印文件路径,它不会打印它。我感觉程序根本没有离开 open_file_dialog() ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2023-02-24
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多