用的是python3.0 win系统
问题出现在 代码第35行
如图 add_button.clicked.后面根本就导入不了别的模块 强制把代码写上去的话 会变成灰色 然后报错
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
最后附上全代码 以及报错的图
第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_())
运行截图:
第35行应该是这样:
add_button.clicked.connect(self.event_add_click)
绑定事件函数时,不需要加上(),你加上了()代表引用这个函数,不是绑定的意思,把()去掉看看。
self.event_add_click() 加括号是函数调用, 此处指定函数名就可以了
add_button.clicked.connect(self.event_add_click)