【问题标题】:How to return the value in Pyqt5? [duplicate]如何返回 Pyqt5 中的值? [复制]
【发布时间】:2021-04-04 23:06:30
【问题描述】:

我希望用户在lineEdit_0 中输入一个值并在文本浏览器中打印该值。但我发现了以下错误。请问我知道怎么解决吗?

printf() takes 2 positional arguments but 3 were given

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        #MainWindow Title
        self.setWindowTitle("Pandora Box")

        #Set Window Icon
        self.setWindowIcon(QtGui.QIcon(r''))

        # Background Palette
        palette = QtGui.QPalette()
        palette.setBrush(self.backgroundRole(), QtGui.QColor(70,70,70))
        self.setPalette(palette)

        #StatusBar
        self.statusBar().showMessage("Coming Soon")

            # Text Browser
            self.tb = self.ui.textBrowser
            self.tb.setAcceptRichText(True)
            self.tb.setOpenExternalLinks(True)
    
            #Click Button Effect
            self.ui.pushButton.setText('Display')
            text = self.ui.lineEdit_0.text() #Error 
    
            self.ui.pushButton.clicked.connect(self.printf(self, text)) #Error
    
    
        def printf(self, mes):
            self.tb.append(mes)  
            self.cursot = self.tb.textCursor()
            self.tb.moveCursor(self.cursot.End)
    
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication([])
        mainWindow = MainWindow()
        mainWindow.show()
        sys.exit(app.exec())

【问题讨论】:

  • 这里没有必要将self作为agrument:self.ui.pushButton.clicked.connect(self.printf(self, text)) #Error尝试使用self.ui.pushButton.clicked.connect(self.printf(text))
  • 弹出另一个错误“argument 1 has unexpected type 'NoneType'”
  • 好的,你能给我 Ui_MainWindow 类,这样我就可以重新创建代码并运行它。请检查 text 变量是否不是 None 类型
  • @crackanddie 用户界面无关紧要,原因很简单:信号连接需要对可调用对象的引用

标签: python pyqt5


【解决方案1】:

创建信号连接时,connect() 的参数必须是对可调用对象的引用。

这意味着如果函数应该以self.printf() 执行,则连接必须不带括号:

        self.ui.pushButton.clicked.connect(self.printf)

请注意,您尝试在连接中添加文本参数是错误的,不仅因为上述原因,还因为您可能希望使用行编辑的文本,就像调用函数时一样,但text = self.ui.lineEdit_0.text() 只会在您尝试连接时为您提供文本(可能是一个空字符串)。另外,您在函数中添加了self 参数,这显然是错误的。

问题是您的 printf 函数需要一个与 clicked 信号参数(这是一个布尔值)不兼容的参数,并且您还希望根据该行为该参数使用动态值编辑内容。

所以,你要么完全避免争论:

        self.ui.pushButton.clicked.connect(self.printf)
        # ...

    def printf(self):
        mes = self.ui.lineEdit_0.text()
        self.tb.append(mes)
        # ...

或者你在连接中使用 lambda

        self.ui.pushButton.clicked.connect(lambda: self.printf(self.ui.lineEdit_0.text()))

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2017-06-06
    • 2014-12-11
    相关资源
    最近更新 更多