2017-03-08 4 views
0

나는 코드 나, pango와 범위 속성이 괜찮 명령 옵션을 포함하지 않는 알고PyGTK 라벨의 클릭 가능한 텍스트마다 다른 콜백을 바인딩하는 방법은 무엇입니까?

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk as gtk 
from gi.repository import Gdk as gdk 

def hello(*args): 
    print "hello, this is most used text editor for pyton" 

def wellcome(*args): 
    print "wellcome to the our program please update to premium version" 


w = gtk.Window(title = "example", type = gtk.WindowType.TOPLEVEL) 
w.resize(300, 200) 

mylabel = gtk.Label() 
mylabel.set_markup("""please read """ 
        """<span underline = "single" command = "hello">hello</span> or """ 
        """<span underline = "single" command = "wellcome">wellcome</span>""") 


w.add(mylabel) 
w.show_all() 
gtk.main() 

다음에 예를 들어

라벨

의 텍스트에 콜백을 연결합니다. 그것을 할 다른 방법이 있습니까?

+0

는 두'의 Gtk.Button's를 사용하고의'clicked' 신호에 연결해야합니다. – elya5

+0

@ elya5, 내가 예를 들어 줄 수 있니? –

답변

1

핸들러를 activate-link 신호에 연결하여이 작업을 수행 할 수 있습니다. 콜백의 서명은 버튼 클릭과 다르며 추가 처리를 중지하려면 True를 반환해야합니다.

import gi 

gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

class MyWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Hello World") 

     label = Gtk.Label() 
     label.set_markup('<a href="mylink">Click Here</a> but not here.') 
     label.connect("activate-link", self.on_link_clicked) 
     self.add(label) 

    def on_link_clicked(self, label, uri): 
     print("%s clicked" % uri) 
     return True 

win = MyWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 
+0

답장을 보내 주셔서 감사합니다. 그러나이 대답은 내 문제를 해결하지 못합니다. 밑줄 친 (클릭 가능) 레이블은 브라우저에서 링크를 엽니 다. 브라우저에서 열지 않으려합니다. –

+0

콜백에서 True를 반환 했습니까? 작성된 그대로 제 코드를 실행하거나 코드를 게시하십시오. – bohrax

+0

네, 잘 작동합니다. 그러나 작은 문제가 있습니다. 어떻게하면 클릭 가능한 텍스트마다 다른 콜백을 바인딩 할 수 있습니까? –

0
import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

class MyWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Hello World") 

     label = Gtk.Label() 
     label.set_markup('please read <a href="hello">Hello</a> or <a href="wellcome">wellcome</a>') 
     label.connect("activate-link", self.on_link_clicked) 
     self.add(label) 

    def hello(self): 
     print "hello, this is most used text editor for pyton" 

    def wellcome(self): 
     print "wellcome to the our program please update to premium version" 

    def on_link_clicked(self, label, uri): 
     print("%s clicked" % uri) 

     if uri == "hello": 
      self.hello() 
     elif uri == "wellcome": 
      self.wellcome() 

     return True 

win = MyWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main()