python-pyqt5- .clicked.connect

用的是python3.0 win系统

问题出现在 代码第35行
如图 add_button.clicked.后面根本就导入不了别的模块 强制把代码写上去的话 会变成灰色 然后报错

img

img

import os
import sys
from PyQt5.QtCore import Qt  # 不允许被修改时用
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QPushButton, QLineEdit, QTableWidget, QTableWidgetItem, QLabel


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('文哥专属')
        self.resize(980, 450)
        # 窗体位置
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        # 创建总布局
        layout = QVBoxLayout()  # QVBoxLayout是垂直布局
        # 创建1个水平布局 添加到总布局
        layout.addLayout(self.two_layout())
        # 设置弹簧
        layout.addStretch()
        # 给窗体设置元素的排列方式
        self.setLayout(layout)

    def two_layout(self):
        # 2.创建搜索框菜单布局
        two_layout = QHBoxLayout()
        # 2.1 创建输入框
        input_line = QLineEdit()
        input_line.setPlaceholderText("请输入商品名")
        two_layout.addWidget(input_line)
        # 2.2 创建按钮
        add_button = QPushButton("添加")

        # 这里是第35行  出现错误的地方
        add_button.clicked.connect(self.event_add_click())

        two_layout.addWidget(add_button)

        return two_layout

    def event_add_click(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

#运行结果及详细报错内容#

D:\pycharm文件\pyqt5\venv\Scripts\python.exe D:/pycharm文件/pyqt5/test1.py
Traceback (most recent call last):
File "D:\pycharm文件\pyqt5\test1.py", line 47, in
window = MainWindow()
File "D:\pycharm文件\pyqt5\test1.py", line 20, in init
layout.addLayout(self.two_layout())
File "D:\pycharm文件\pyqt5\test1.py", line 35, in two_layout
add_button.clicked.connect(self.event_add_click())
TypeError: argument 1 has unexpected type 'NoneType'

进程已结束,退出代码1

最后附上全代码 以及报错的图

img

img

img

第35行应该是这样:

add_button.clicked.connect(self.event_add_click)

而不是:

add_button.clicked.connect(self.event_add_click())

因为你需要连接的是event_add_click函数本身,而不是它的执行结果。

这样就可以正常执行了。

错误提示第35行括号中的参数结果是一个空值,none 请检查下括号中的函数写法是否正确,返回的结果是否正确。

程序中的 self.event_add_click() 多了一个括号


        # 这里是第35行  出现错误的地方
        # add_button.clicked.connect(self.event_add_click())  #括号应删除
        add_button.clicked.connect(self.event_add_click)  #修改后的程序

修改后的代码如下, QPushButton().clicked.connect 用法示例可参考: https://www.cnblogs.com/hyq-lst/p/15866324.html


import os
import sys
from PyQt5.QtCore import Qt  # 不允许被修改时用
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtWidgets import QPushButton, QLineEdit, QTableWidget, QTableWidgetItem, QLabel


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('文哥专属')
        self.resize(980, 450)
        # 窗体位置
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        # 创建总布局
        layout = QVBoxLayout()  # QVBoxLayout是垂直布局
        # 创建1个水平布局 添加到总布局
        layout.addLayout(self.two_layout())
        # 设置弹簧
        layout.addStretch()
        # 给窗体设置元素的排列方式
        self.setLayout(layout)

    def two_layout(self):
        # 2.创建搜索框菜单布局
        two_layout = QHBoxLayout()
        # 2.1 创建输入框
        input_line = QLineEdit()
        input_line.setPlaceholderText("请输入商品名")
        two_layout.addWidget(input_line)
        # 2.2 创建按钮
        add_button = QPushButton("添加")

        # 这里是第35行  出现错误的地方
        add_button.clicked.connect(self.event_add_click)

        two_layout.addWidget(add_button)

        return two_layout

    def event_add_click(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

运行截图:

img

第35行应该是这样:

add_button.clicked.connect(self.event_add_click)

img

绑定事件函数时,不需要加上(),你加上了()代表引用这个函数,不是绑定的意思,把()去掉看看。

self.event_add_click() 加括号是函数调用, 此处指定函数名就可以了
add_button.clicked.connect(self.event_add_click)