【问题标题】:Pass an argument with QtCore.SIGNAL使用 QtCore.SIGNAL 传递参数
【发布时间】:2014-01-21 16:01:51
【问题描述】:

代码:

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

我正在尝试制作一个“可点击”标签,这样如果我点击它,它将打开一个通过self.connect(self.a1, QtCore.SIGNAL("clicked()"), self.OpenURL) 传入参数的 URL。

问题是,是否可以将参数 (url) 传递给 self.OpenURL() 以便它可以打开 URL?

【问题讨论】:

    标签: python qt pyqt arguments signals-slots


    【解决方案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找到。

    【讨论】:

    • 非常感谢! :-)
    猜你喜欢
    • 2012-05-24
    • 2011-04-22
    • 2013-10-14
    • 2012-04-28
    • 2016-05-25
    • 2015-08-12
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多