【问题标题】:creation and usage of a user defined slot in PyQt在 PyQt 中创建和使用用户定义的插槽
【发布时间】:2013-01-11 02:13:02
【问题描述】:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QMainWindow):
    def __init__(self):
        super(Example, self).__init__();
        self.initUI()


    def initUI(self):
        field = QtGui.QLineEdit("", self)
        field.resize(field.sizeHint())
        field.move(150, 100)

        submit_button = QtGui.QPushButton("Fill hello world", self)
        submit_button.resize(submit_button.sizeHint())
        submit_button.move(50,300)
        submit_button.clicked.connect(self.modify(field))


    def modify(self, field):
        field.setText("hello")

def main():    #!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QMainWindow):
    def __init__(self):
        super(Example, self).__init__();
        self.initUI()


    def initUI(self):
        field = QtGui.QLineEdit("", self)
        field.resize(field.sizeHint())
        field.move(150, 100)

        submit_button = QtGui.QPushButton("Fill hello world", self)
        submit_button.resize(submit_button.sizeHint())
        submit_button.move(50,300)
        submit_button.clicked.connect(self.modify(field))


    def modify(self, field):
        field.setText("hello")


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__=='__main__':
    main()

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__=='__main__':
    main()

好的。所以这就是我想要做的。每当点击 sumbit 按钮时,我希望该字段由“hello world”填充。 这意味着将提交按钮连接到用户定义的插槽。如何将字段传递给 modify() 函数,在其中可以更改其文本?

目前代码报错:

     File "test.py", line 21, in initUI
    submit_button.clicked.connect(self.modify(field))
TypeError: connect() slot argument should be a callable or a signal, not 'NoneType'

【问题讨论】:

    标签: python pyqt signals-slots


    【解决方案1】:

    首先,您从connect() 收到错误消息,因为您没有将函数作为参数传递,而是函数调用的结果,即None。这一行应该写成:

    submit_button.clicked.connect(self.modify)
    

    那么修改函数应该改成知道填哪个字段。实现此目的的一种方法是将字段保存在类变量中,并在其前面加上 self. 前缀:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import sys
    from PyQt4 import QtGui, QtCore
    
    class Example(QtGui.QMainWindow):
        def __init__(self):
            super(Example, self).__init__();
            self.initUI()
    
    
        def initUI(self):
            self.field = QtGui.QLineEdit("", self)
            self.field.resize(self.field.sizeHint())
            self.field.move(150, 100)
    
            submit_button = QtGui.QPushButton("Fill hello world", self)
            submit_button.resize(submit_button.sizeHint())
            submit_button.move(50,300)
            submit_button.clicked.connect(self.modify)
    
    
        def modify(self):
            self.field.setText("hello")
    
    
    def main():
        app = QtGui.QApplication(sys.argv)
        ex = Example()
        ex.show()
        sys.exit(app.exec_())
    
    if __name__=='__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 2013-01-12
      • 2011-12-13
      • 2013-09-05
      • 2013-05-31
      • 2013-07-20
      • 1970-01-01
      • 2012-07-13
      相关资源
      最近更新 更多