2014-06-07 14 views
1

다른 명령에서 목록 상자에서 반환 된 항목을 사용할 수 없습니다. "myBuff"이 (가) 필드 이름이 아님을 알리는 메시지를 받으십시오. myBuff을 문자열로 반환해야합니까? TypeError: selectBuffer() takes exactly 2 arguments (1 given)목록 상자에서 반환 된 항목이 작동하지 않습니다.

import arcpy,sys,os 
from Tkinter import* 

class Application(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.grid() 
     self.createWidgets(master) 

    def createWidgets(self,master): 
     #add listbox and populate it 
     self.bufList = Listbox(master, height=4, width=17, selectmode=SINGLE) 
     self.bufList.grid(row=0, column=0, rowspan=4, columnspan=2, sticky='w') 
     self.bufList.insert(END, "Select A Buffer") 
     for item in ["5m", "10m", "15m"]: 
      self.bufList.insert(END, item) 

    #add Select Button 
    self.selectButton = Button(master, text='1. Select',command=self.selectBuffer) 
     self.selectButton.grid(row=0, column=2, sticky='nw') 
     self.selectButton.bind("<<ListboxSelect>>", self.selectBuffer) 

    #add method for select button 
    def selectBuffer(self, event): 
     global select 
     select = self.bufList.curselection() 
     myBuff = self.bufList.get(select[0]) #get value of selected item 
     #perform geoprocessing analysis 
     mxd = arcpy.mapping.MapDocument("C:/Projects/MyProject.mxd) 
     arcpy.Buffer_analysis("C:/Projects/road.shp", "C:/Projects/roadBuffer100.shp","myBuff") 

root = Tk() 
app = Application(master=root) 
app.mainloop() 
+1

값 대신 문자열 "myBuf"를 전달하고 있습니다. – stark

+0

항상 전체 오류 메시지 표시 (추적) – furas

답변

0

당신은 selectBuffer 두 번 사용 : 다른 시간 나는이 메시지가 나타납니다. 이 라인의

command=self.selectBuffer 

self.selectButton.bind("<<ListboxSelect>>", self.selectBuffer) 

하나는
는 또 다른 def selectBuffer(self): 그래서 당신이 오류가 기대 def selectBuffer(self, event): 기대하고있다.

event의 기본값으로 None을 사용하면 문제를 해결할 수 있습니다.

def selectBuffer(self, event=None): 
+0

답장을 보내 주셔서 감사합니다. – user3718296

+0

나는 event = None에 들어갔다. 그리고 이것은 내가 얻는 대답이다. Tkinter 콜백에서의 예외 트레이스 백 (가장 최근 호출 마지막) : 파일 "C : ₩ Apps ₩ Python27 ₩ ArcGIS10.1 ₩ lib ₩ lib-tk ₩ Tkinter.py", 1410 줄, __call__ return self.func (* 파일 "C : \ Apps \ ArcGIS" 파일 "H : \ MyCourses \ GIST8138 \ Mod8 \ 4_Buttons.py", selectBuffer "FULL", "ROUND", "NONE" \ Desktop10.1 \ arcpy \ arcpy \ analysis.py "줄 686, 버퍼에 raise e ExecuteError : 실행하지 못했습니다. 매개 변수가 유효하지 않습니다. 오류 000728 : 필드 myBuff가 테이블 내에 존재하지 않습니다. 실행하지 못했습니다 (버퍼). – user3718296

+0

이제'arcpy.Buffer_analysis()'에 문제가 생겼습니다 - Tkinter가 아니라. 스탁 (Stark)은 덧붙여서 '당신은 값 대신에 문자열 "myBuf"를 전달하고있다. ''myBuf ''대신'myBuf'를 사용하십시오. 귀하의 질문에 오류 메시지를 추가하십시오 - 그것은 더 가독성이 될 것입니다. – furas

관련 문제