我正在考虑使用一个简单的,目前很丑陋的用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()
任何反馈都将不胜感激。提前谢谢。
答案 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()
。