【问题标题】:How to pass an argument to function in a signal?如何将参数传递给信号中的函数?
【发布时间】:2013-05-21 17:23:08
【问题描述】:

我有一个函数:

def pausing(ses):
   if ses.is_paused() == True:
      ses.start()
   else:
      ses.pause()

暂停或恢复 torrent 下载(取决于 torrent 的实际状态)。 我想用一个按钮连接这个功能,像这样:

QtCore.QObject.connect(self.pausebutton, QtCore.SIGNAL(_fromUtf8("clicked()")), pause)

但我不知道如何将参数 ses 传递给该插槽(它与我想要传递的 ses 属于不同的类)。 我不想使用全局变量 - 如何解决我的问题?

【问题讨论】:

    标签: python pyqt signals-slots


    【解决方案1】:

    有两种方法(我以self.on_button为例函数)

    类似这样的:

    button1.clicked.connect(partial(self.on_button, 1))
    

    还有:

    button1.clicked.connect(lambda: self.on_button(1))
    

    【讨论】:

    • 但是我应该在哪里添加这一行?
    【解决方案2】:

    我搜索了很多网站,在这里找到了示例:

    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    
    class MyForm(QMainWindow):
        def __init__(self, parent=None):
            super(MyForm, self).__init__(parent)
            button1 = QPushButton('Button 1')
            button2 = QPushButton('Button 1')
            button1.clicked.connect(lambda: self.on_button(1))
            button2.clicked.connect(lambda: self.on_button(2))
    
            layout = QHBoxLayout()
            layout.addWidget(button1)
            layout.addWidget(button2)
    
            main_frame = QWidget()
            main_frame.setLayout(layout)
    
            self.setCentralWidget(main_frame)
    
        def on_button(self, n):
            print('Button {0} clicked'.format(n))
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        form = MyForm()
        form.show()
        app.exec_()
    

    这个例子来自Eli Bendersky's website

    我希望它能帮助任何需要它的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多