2012-11-14 1 views
1

위젯으로 맞춤 정보를 저장할 수있는 방법이 있습니까?위젯에 사용자 정의 정보 저장, gobject-introspect

예를 들어 20 개의 URL이있는 목록이 있다고 가정 해 보겠습니다.

각 URL 당 하나씩 20 개의 버튼을 만듭니다.

버튼을 클릭하면 URL이 열리므로 만들고 싶습니다. 하지만 어떤 단추가 어떤 URL에 링크되어 있는지 알 수있는 방법이 필요합니다. 버튼이 clciked 될 때 url을 이벤트 처리기 함수에 전달하여 열 수 있습니다.

나는이 작업을 수행하는 생각 또 다른 해결책, 그래서

class MyButton(Gtk.Button) 
    def __init__(self, url): 
     Gtk.Button.__init__(self) 
     self.url = url 
     ... 

같은 Gtk.Button 클래스를 확장하는 사용자 정의 클래스를 만드는 것이 었습니다 그럼 간단하게 할 수있는 버튼 = MyButton에 (URL)

그러나 이것은 과도한 것처럼 보입니다. 그래서 위젯 자체에 맞춤 정보를 저장할 수 있는지 궁금합니다.

답변

3

가장 간단한 해결책은 clicked 신호 처리기에 전달 된 추가 데이터로 URL을 추가하는 것입니다 : 당신은 또한 단지도 서브 클래 싱하지 않고, 그것에 할당하여 위젯에 어떤 속성을 추가 할 수 있습니다 PyGTK에서

# handle_click will receive additional url arg along with the button 
button.connect('clicked', handle_click, url) 

:

# handle_click will be called with button and can access button.url 
button.url = url 
button.connect('clicked', handle_click) 
+1

+1. 그러나 나는 두 번째 제안이 첫 번째 제안보다 간단하다고 말한다. – ptomato

+0

@ptomato 맛의 물질, 그것은 보일 것입니다; 나는 약간의 옵션을 선호한다. 'button.connect ('클릭, 람다 버튼 : handle_click (url))'도 있지만 그 중 하나는 쉽게 [루프를 잃는다] (http://stackoverflow.com/questions/2295290/what-do-lambda- function-closures-capture-in-python), 생략했습니다. – user4815162342