如何打开tkinter对话框并在程序中稍后使用结果

时间:2016-10-25 23:45:16

标签: python tkinter combobox dialog

我缺少对tkinter对话框如何与Python程序中其余代码一起使用的基本理解。也许我的方法不是最好的,但我想做的是以下几点:

Run some code to select some files (works)
Parse the files (works)
Based on what is in the files, open a simple combo-box with options to choose from (doesn't work)
Based on the choice the user makes, perform different actions on the files (doesn't get this far)

tkinter有一个非常易于使用的功能来以图形方式选择目录:

root.dirname =  askdirectory(initialdir = "/home/jon/Python/",title = "Choose directory")

我可以在我的程序中随时使用它,选择一个目录,将其存储在root.dirname中,并在我的程序中稍后根据需要使用root.dirname。我想通过下拉菜单做一些非常类似的事情。我想象下面的事情:

selectedOption = dropdownbox(('Option1', 'Option2', 'Option3'))

然后会打开一个简单的对话框,向用户显示一个带有三个选项的下拉框。在用户选择他们想要的选项(并按OK或其他影响)后,窗口关闭,selectedOption包含所选的选项。然后我的代码可以继续并使用selectedOption来确定要采取的方法。

我理解的主要差距是如何在我的代码中的任意位置打开tkinter对话框并使用"结果"稍后在我的代码中的对话框。我为tkinter组合框等找到的所有代码似乎更像是构建独立应用程序而不是简短的对话框来做出决定并将控制返回给调用函数。但我想我只是缺少一些东西。任何帮助表示赞赏。

编辑:添加了基于Uriel输入的代码

from tkinter import simpledialog
from tkinter import *
def returnResultFromSimpleDialog():

        root = Tk()
        root.result = simpledialog.askstring('Input', 'Enter a string') # title and description
        root.withdraw()
        return root.result

if __name__ == '__main__':
        print(returnResultFromSimpleDialog())

这非常接近我想要做的事情,除了我想要一个带有下拉菜单而不是文本框的窗口。

1 个答案:

答案 0 :(得分:1)

那样:

import tkinter.simpledialog
result = tkinter.simpledialog.askstring('Input', 'Enter a string') # title and description

注意 - 要使用tkinter对话框(唯一可用的对话框),您必须在tkinter应用程序中激活它。

黑客会调用此行两次(第一次崩溃 - 处理它 - 并打开一个窗口),然后第二次调用有一个父窗口:

>>> import tkinter.simpledialog
>>> result = tkinter.simpledialog.askstring('Input', 'Enter a string') # title and description
Traceback (most recent call last):
  ...
AttributeError: 'NoneType' object has no attribute 'winfo_viewable'
>>> result = tkinter.simpledialog.askstring('Input', 'Enter a string') # title and description
>>> result
'hello'