2013-01-18 49 views
1

我无法从“Entry”中检索变量,然后将该变量输入到函数中。例如,我想检索一个变量“entry”的“NbF”。我在“设置”,我可以检索它与“获取”,但当我得到一个新的文本“条目”,我没有得到新的价值。Python - Tkinter - 我想从函数获取()的值从函数中使用

这是我的代码:

#!/usr/local/bin/python 
# -*- coding:utf-8 -*- 
from Tkinter import * 
import tkFileDialog, tkMessageBox 

application = Tk() 
application.title("Application Drone - Analyse Vidéo") 


def getFile(): 
     varName = tkFileDialog.askopenfilename().encode('utf-8') 
     Name.set('Path : ' + varName) 

def convert(nbFrame): 
    print 'ffmpeg -i pathVideo -r '+nbFrame+' -f image2 "temp%4d.png"' 

def detect(): 
    pass 

def analyse(): 
    pass 

frame1 = Frame(application, bg="blue", width=560, height=100) 
frame1.pack(side=TOP, fill=X) 

frame2 = Frame(application, bg="red", width=560, height=100) 
frame2.pack(side=TOP, fill=X) 

frame3 = Frame(application, bg="green", width=560, height=100) 
frame3.pack(side=TOP, fill=X) 

frame4 = Frame(application, bg="yellow", width=560, height=100) 
frame4.pack(side=TOP, fill=X) 

frame5 = Frame(application, bg="grey", width=560, height=100) 
frame5.pack(side=BOTTOM, fill=BOTH, expand=1) 

#frame 1 
Name=StringVar() 
lab1 = Label(frame1, text="Step 1 : Recup video").grid(row=0,column=0) 
butt1 = Button(frame1,text="browse",command=getFile).grid(row=0,column=1) 
nameVideo = Label(frame1, textvariable=Name).grid(row=1,column=0) 

#frame 2 
NbF = StringVar() 
NbPictures=StringVar() 
lab2 = Label(frame2, text="Step 2 : Convert video to images").grid(row=0,column=0) 
ent2 = Entry(frame2, textvariable=NbF).grid(row=0,column=1) 
# ent2.pack() 
NbF.set('nb frame') 
recup2 = NbF.get() 
butt2 = Button(frame2,text="convert",command=lambda :convert(recup2)).grid(row=0,column=2) 
nbP = Label(frame2, textvariable=NbPictures).grid(row=1,column=0) 

#frame 3 
NbS=StringVar() 
lab3 = Label(frame3, text="Step 3 : Detect shape").grid(row=0,column=0) 
butt3 = Button(frame3,text="detect",command=lambda :detect).grid(row=0,column=1) 
numberShape = Label(frame3, textvariable=NbS).grid(row=1,column=0) 

#frame 4 
NbC=StringVar() 
lab4 = Label(frame4, text="Step 4 : Analyse QrCode").grid(row=0,column=0) 
butt4 = Button(frame4,text="analyse",command=lambda :analyse).grid(row=0,column=1) 
numberCoord = Label(frame4, textvariable=NbC).grid(row=1,column=0) 

#frame 5 
lab5 = Label(frame5, text="Step 5 : Send coordonates").grid(row=0,column=0) 
butt5 = Button(frame5,text="send",command=lambda :send).grid(row=0,column=1) 

application.mainloop() 
+0

我很难理解问题出在哪里。有几件事情可能会导致问题,但'.grid'方法总是返回'None'。在你的代码中,当你怀疑你期望的时候,你会给很多变量分配'None'。 – mgilson

回答

2

也许你的意思是:

butt2 = Button(frame2,text="convert",command=lambda :convert(NbF.get())).grid(row=0,column=2) 

这推迟调用NbF.get()直到按钮被按下实际。由于之前的代码,您在创建按钮之前调用NbF.get(),然后每当按下按钮时将该值传递给该函数。


作为一个方面说明,butt2在上面的代码将永远是None这是几乎可以肯定不是你希望它是什么。原因是因为Widget.grid总是返回None。我建议你不要在同一行上创建一个窗口部件并将它打包/网格化 - 总是将它分成两行:

butt2 = Button(frame2,text="convert",command=lambda :convert(NbF.get())) 
butt2.grid(row=0,column=2) 
+0

非常感谢。它完美地工作。我会改变我的所有** Widget.grid **。 – Tof