2016-10-18 5 views
3

나는 클래스 프로젝트로 의료 도구 용 GUI를 만들고 있습니다. 조건이 주어지면 webMD와 같은 다른 웹 사이트에서 수집 된 일련의 치료 옵션을 출력해야합니다. 치료에 관한 정보를 조금 더 제공하기 위해 나열된 치료법 중 하나에 마우스 오버 이벤트를 처리 할 수 ​​있기를 원합니다 (예 : 약물 카테고리, 일반 의약품인지 아닌지 등).Tkinter에서 마우스 오버 이벤트 기능 목록 만들기

라벨은 목록에 저장되어 있습니다. 얼마나 많은 다른 트리트먼트가 미리 반환되는지는 알지 못합니다. 그래서 내 질문에 어떻게 이러한 mouseover 이벤트를 작동시킬 수 있습니다. 나는 모든 가능한 단일 레이블에 대해 함수 정의를 작성할 수 없으며 수백 또는 수천 개의 숫자를 사용합니다. 나는 그것을 할 아주 냉담한 방법이 있다고 확신하지만, 나는 무엇을 모릅니다. ([판단하지 않는다 -;) 여기

def search_click(): 
     """ 
     Builds the search results after the search button has been clicked 
     """ 
     self.output_frame.destroy()             # Delete old results 
     build_output()                # Rebuild output frames 
     treament_list = mockUpScript.queryConditions(self.condition_entry.get()) # Get treatment data 
     labels = [] 
     frames = [self.onceFrame, self.twiceFrame, self.threeFrame, self.fourFrame] # holds the list of frames 
     for treament in treament_list:            # For each treatment in the list 
      label = ttk.Label(frames[treament[1] - 1], text=treament[0])   # Build the label for treatment 

      labels.append(label)             # Add the treatment to the list 
      label.pack()   

와 GUI의 모습입니다 GUI image

텍스트는 "정보에 대한 약물 위로 마우스를"

여기에 레이블을 만들기위한 내 코드입니다 마우스가 마약 중독자에 따라 달라지는 지에 따라 변경해야합니다.

+0

... treatmenttreament 수정, 당신은 기능'search_click 이름 '하지만 마우스 오버 코드에 대해 묻는 것 같습니까? 실제 마우스 오버 텍스트가 어디에 있어야하며 무엇을해야하는지에 대한 어떤 지시도하지 않았습니다. 항목의 이름 만 원합니까? 아니면 파일에서 가져 오는 것입니까? – enderland

+0

예 search_click 함수는 누군가 검색 버튼을 클릭 할 때 실행되므로 클릭하기 전에 표시되는 약물은 없습니다. 따라서 마우스 오버 이벤트와 관련된 것은이 후에 발생해야합니다. 나는이 코드를 주로 포함하여 사람들이 레이블이 어떻게 만들어지고 있는지 이해할 수있게했습니다. 결국이 정보는 다른 파일에서 나온 것 같지만, 지금은 마약 이름만으로도 행복 할 것이므로 어떻게하는지 이해합니다. – bendl

답변

3

가능한 모든 단일 레이블에 대해 함수 정의를 쓸 수 없으며 숫자가 수백 또는 수천입니다. 나는 그것을 할 아주 냉담한 방법이 있다고 확신하지만, 나는 무엇을 모릅니다.

원하는대로 거의 일치하는 lambda functions을 확인하십시오. 귀하의 경우에는

는 무엇인가 : 또한 바로 변수를 주문하십시오

def update_bottom_scroll_bar(text): 
    # whatever you want to do to update the text at the bottom 

for treatment in treament_list: # For each treatment in the list 
    label = ttk.Label(frames[treatment[1] - 1], text=treatment[0]) # Build the label for treatment 

    label.bind("<Enter>", lambda event, t=treatment: update_bottom_scroll_bar(text=t)) 
    label.bind("<Leave>", lambda event: update_bottom_scroll_bar(text='Default label text')) 

    labels.append(label) # Add the treatment to the list 
    label.pack() 

, 내가 코드를 이해하지 못하는

+0

코드 완성의 한 단점, 오타가 xD를 영속화합니다. – bendl