2014-01-03 2 views
1

Код:Передает аргумент с QtCore.SIGNAL

class Text(QtGui.QLabel): 
    def __init__(self,parent): 
     QtGui.QLabel.__init__(self,parent) 

    def mouseReleaseEvent(self,evt): 
     pos = evt.pos() 
     if pos.x() < 0 or pos.y() < 0 or pos.x() > self.width() or pos.y() > self.height(): 
      return 
     self.parent().update() 
     self.emit(QtCore.SIGNAL('clicked()')) 

    def updateText(self, txt): 
     self.setText(txt) 

class Window(QtGui.QMainWindow): 
    def createNews(self): 
     self.a1 = Text(self) 
     self.a1.updateText("Test") 
     self.a1.setFixedWidth(200) 
     self.a1.move(23, 173) 
     self.a1.show() 
     self.connect(self.a1, QtCore.SIGNAL("clicked()"), self.OpenURL) 

    def OpenURL(self, URL): 
     QtGui.QDesktopServices.openUrl(QtCore.QUrl(str(URL))) 

Я пытаюсь сделать «интерактивный» ярлык, так что если я нажимаю, он будет открыть URL, переданный в аргументе через self.connect(self.a1, QtCore.SIGNAL("clicked()"), self.OpenURL).

Вопрос в том, можно ли передать аргумент (url) на self.OpenURL(), чтобы он мог открыть URL-адрес?

ответ

1

Во-первых, вы должны избавиться от синтаксиса сигнала старого стиля, а также определить сигнал пользовательского clicked, например:

class Text(QtGui.QLabel): 
    clicked = QtCore.pyqtSignal() 

    def mouseReleaseEvent(self, evt): 
     ... 
     self.clicked.emit() 

Затем используйте lambda послать аргумент с сигналом:

self.a1.clicked.connect(lambda: self.OpenURL(url)) 

Дополнительную информацию о синтаксисе сигнала/слот нового стиля можно найти here.

+0

Большое спасибо! :-) – Lucas

Смежные вопросы