使用PyQt5开发一个GUI界面用于与用户进行交互,使用GUI界面对图片进行人流量统计,报错为
show(self): first argument of unbound method must have type 'QWidget'
# -*- coding: utf -8 -*-
# Form implementation generated from reading ui file 'PeopleNum.ui'
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(665, 601)
MainWindow.setMinimumSize(QtCore.QSize(665, 601))
font = QtGui.QFont()
font.setPointSize(12)
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(80, 370, 340, 127))
self.textEdit.setMinimumSize(QtCore.QSize(340, 127))
self.textEdit.setMaximumSize(QtCore.QSize(16777215, 127))
self.textEdit.setObjectName("textEdit")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(81, 21, 501, 331))
self.groupBox.setMinimumSize(QtCore.QSize(501, 331))
self.groupBox.setObjectName("groupBox")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(10, 20, 481, 301))
self.label.setMinimumSize(QtCore.QSize(481, 301))
self.label.setText(" ")
self.label.setObjectName("label")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(0, 0, 2, 2))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0,)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget1.setGeometry(QtCore.QRect(460, 370, 122, 129))
self.layoutWidget1.setObjectName("layoutWidget1")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget1)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.bth_file = QtWidgets.QPushButton(self.layoutWidget1)
self.bth_file.setMinimumSize(QtCore.QSize(120, 60))
self.bth_file.setMaximumSize(QtCore.QSize(120, 60))
self.bth_file.setObjectName("bth_file")
self.verticalLayout.addWidget(self.bth_file)
self.bth_predict = QtWidgets.QPushButton(self.layoutWidget1)
self.bth_predict.setMinimumSize(QtCore.QSize(120, 60))
self.bth_predict.setMaximumSize(QtCore.QSize(120, 60))
self.bth_predict.setObjectName("bth_predict")
self.verticalLayout.addWidget(self.bth_predict)
MainWindow.setCentralWidegt(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 665, 26))
self.menubar.setObjectName("menuber")
MainWindow.setMenuBer(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, Mainwindow):
_translate = QtCore.QCoreApplication.translate
Mainwindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "图片"))
self.bth_file.setText(_translate("MainWindow", "上传图片"))
self.bth_predict.setText(_translate("MainWindow", "检测图片"))
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5.QtGui import *
from GUIstatistical import Ui_MainWindow
import requests
import base64
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.setWindowTitle('控制台')
self.bth_file.clicked.connect(self.openFile)
self.bth_predict.clicked.connect(self.people_num)
def openFile(self):
result = QFileDialog.getOpenFileName(self, "选择一个文件", "./", "*.jpg;;*.png;;AllFile(*.*)")
self.img_path = result[0]
print(self.img_path)
self.label.setPixmap(QPixmap(self.img_path))
self.label.setScaledContents(True)
def people_num(self):
API_Key = ''
Secret_key = ''
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + API_Key + '&client_secret=' + Secret_key
response_1 = requests.get(host)
if response_1:
response_1 = dict(response_1.json())
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_num"
f = open(self.img_path, 'rb')
img = base64.b64encode(f.read())
params = {"image": img}
access_token = response_1['access_token']
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print(response.json())
text = "检测到图片中的人数为:" + str(dict(response.json())['person_num']) + "人"
self.textEdit.setPlainText(text)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow
win.show()
sys.exit(app.exec_())
应该是没有加括号的原因,你试试,希望有帮助!
修改前:
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow **# 这没有写括号**
win.show()
sys.exit(app.exec_())
修改后:
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow
win.show(app) # 把app传进去试试
sys.exit(app.exec_())