从Tkinter GUI返回变量

时间:2016-04-22 15:09:58

标签: python python-2.7 user-interface tkinter

我正在考虑使用一个简单的,目前很丑陋的用Tkinter构建的GUI来从用户那里获得两个变量。即文件路径和下拉选项(OptionMenu)。

选择的变量稍后将在Python脚本中使用,这是我遇到困难的地方。简而言之,如何将用户选择与变量对齐:Carrier,Path。

请参阅下面的示例代码:

from Tkinter import *
from tkFileDialog import askopenfilename

def Choose_Path():
    Tk().withdraw()
    return askopenfilename()


root = Tk()
root.geometry('400x400')
root.configure(background='#A2B5CD')

C_Label = Label(root, text='Carrier Choice:', bg='#A2B5CD', fg='black',font=('Calibri', 12))
C_Label.grid(row=0,sticky=W, padx =10)
I_Label = Label(root, text='Invoice Path:', bg='#A2B5CD', fg='black',font=('Calibri', 12))
I_Label.grid(row=1, sticky=W, padx =10)


var = StringVar(root)
var.set('Choose Carrier...')
option = OptionMenu(root, var, 'DHL','DPD','DX','Fedex','Geodis','Hermes','WN Direct')
option.config(relief=RAISED, highlightbackground='#A2B5CD')
option.grid(row=0,column=1, sticky=W, pady = 10)

browser = Button(root, text = 'Browse Invoice...', command=Choose_Path)
browser.grid(row=1, column=1, sticky=W, pady=10)


Button(root, text='Accept and Close').grid(column=1, sticky=S)

root.mainloop()

任何反馈都将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

通过结合您的反馈和更多的额外功能,我现在似乎得到了我需要的结果。请参阅下面的内容。

from Tkinter import *
from tkFileDialog import askopenfilename
path = []

def Choose_Path():
    Tk().withdraw()
    path.append(askopenfilename())

def CloseGUI():
    root.quit()
    root.destroy()

root = Tk()
root.geometry('400x400')
root.configure(background='#A2B5CD')

C_Label = Label(root, text='Carrier Choice:', bg='#A2B5CD', fg='black',font=('Calibri', 12))
C_Label.grid(row=0,sticky=W, padx =10)
I_Label = Label(root, text='Invoice Path:', bg='#A2B5CD', fg='black',font=('Calibri', 12))
I_Label.grid(row=1, sticky=W, padx =10)

var = StringVar(root)
var.set('Choose Carrier...')
option = OptionMenu(root, var, 'DHL','DPD','DX','Fedex','Geodis','Hermes','WN Direct')
option.config(relief=RAISED, highlightbackground='#A2B5CD')
option.grid(row=0,column=1, sticky=W, pady = 10)

browser = Button(root, text = 'Browse Invoice...', command=Choose_Path)
browser.grid(row=1, column=1, sticky=W, pady=10)
b1 = Button(root, text='Accept and Close', command = CloseGUI).grid(column=1, sticky=S)
mainloop()

print var.get()
print path

感谢您的帮助! 1

答案 1 :(得分:0)

两个问题:

- 您必须弄清楚何时结束根的主循环。从您致电root.mainloop()的那一刻起,目前该程序将不会提示您下一行(您没有,但我认为您将在最终的程序中),直到您关闭Tk窗口。

- 在mainloop结束后,您需要将变量值放在某处。目前,option对象(OptionMenu实例)将包含您的运营商的值,因此您可以执行option.get()之类的操作。 文件名稍微复杂一些,因为您不会将其存储在某处:您从Choose_Path()返回它,但返回值不会存储在任何地方。您可能需要将此值存储在全局中。 (此存储必须在Choose_Path内进行,例如FileName = askopenfilename()而不是return askopenfilename()