2014-02-16 3 views
1

텍스트 객체 등 다양한 객체를 추가하는 캔버스가 있습니다. 각 캔버스 하위 객체에 "태그"속성을 추가합니다.Canvas 객체 태그 : 원래 제공 한 유형이 아닙니다.

import tkinter 

window = tkinter.Tk() 
myCanvas = tkinter.Canvas(window, width = 400, height = 400) 
myCanvas.pack() 

textItemTags = { "id": 1, "name": "test" } 
textItemContents = "asdf" 
textItem = myCanvas.create_text(1, 1, tags = textItemTags, text = textItemContents) 

# some method later on now tries to retrieve tag values for a selected canvas child object... 
searchTags = myCanvas.gettags(textItem) 

print(searchTags) # array of strings 
print(isinstance(searchTags[0], str)) # true..? 

문제점 : 아래의 예에서, I이 절대적으로지지 된 "태그"속성에 대한 딕셔너리를 추가 캔버스 객체의 gettags 방법을 사용 searchTags 비고 리턴 결과 - 이제이 나타내는 문자열의 배열은 각각의 광고 항목 (''id ': 1,'name ':'test '', '...')은 원래 전달 된 실제 사전이 아닙니다.

내 질문은 다음과 같습니다. 내가 전달한 원래의 dict (또는 최소한 복제)이 아닌 현재 문자열 배열. 그리고 2) 정확하게 문자열 배열을 구문 분석하여 정확히 원래 내가 create_text 메서드에 전달한 것을 다시 빌드 할 수 있습니까?

면책 조항 : Python 및 tkinter에 관한 새로운 개념이지만 캔버스 하위 객체에 대한 태그 값 검색 결과는 저에게 이상한 것처럼 보입니다. Tk canvas documentation에 따르면

답변

2

: 각 항목은 또한 그것과 관련된 태그의 수를 가질 수있다

. 태그 은 문자의 문자열이며이며 정수를 제외한 모든 형식을 사용할 수 있습니다.

tags=

태그이 항목에 첨부 할, 또는 튜플 예를 들어,

그리고 Tkinter.Canvas.crate_text documentation에 따라 ... x123 확인하지만 123은 아니다 복수의 태그가 포함 된

문자열이나 튜플이 아니면 Tkinter/Tk가 tags 매개 변수를 문자열로 변환하는 것처럼 보입니다.


어떻게 사전에 태그 이름을 매핑하는 사전을 사용하는 방법에 대한 :

import tkinter 

window = tkinter.Tk() 
myCanvas = tkinter.Canvas(window, width = 400, height = 400) 
myCanvas.pack() 

tag_mapping = {}          # <---- 
tag_mapping['tag1'] = { "id": 1, "name": "test" }  # <---- 
textItemContents = "asdf" 
textItem = myCanvas.create_text(1, 1, tags='tag1', text = textItemContents) 

searchTags = myCanvas.gettags(textItem) 

print(searchTags) # => ('tag1',) 
print(searchTags[0]) # => tag1 
print(tag_mapping[searchTags[0]]) # => {'name': 'test', 'id': 1} 
print(isinstance(tag_mapping[searchTags[0]], dict)) # => True 
+0

감사합니다. tkinter에 대한 문서는 나오기가 어렵 기 때문에 링크를 저장하겠습니다. "태그는 단지 문자열"이고 "이 항목에 첨부 할 태그 또는 여러 태그가 포함 된 튜플"이 이제는 의미가 있습니다. –

+0

"이며 정수 이외의 형식을 사용할 수 있습니다." 방금이 부분을 알아 챘습니다. 방금 숫자 문자열 태그를 할당하고 다시 잘 읽었습니다. 예 : str "1". 이 일을하면서 무엇을 두려워해야합니까? –

+0

@ bob-the-destroyer, 태그가 str이면 걱정할 필요가 없습니다. – falsetru

관련 문제