문제

Code:

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)))

I'm trying to make a "clickable" label, so that if I click it, it will open a URL passed in the argument via self.connect(self.a1, QtCore.SIGNAL("clicked()"), self.OpenURL).

The question is, if it's possible to pass an argument (url) to self.OpenURL() so it could open the URL?

도움이 되었습니까?

해결책

Firstly, you should get rid of the old-style signal syntax, and define a custom clicked signal, like this:

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

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

Then use a lambda to send the argument with the signal:

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

More information about new-style signal/slot syntax can be found here.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top