D:\Program\Python\venv\Scripts\python.exe D:\Program\Python\Python日常编程\LifeReopensForGUI\begin.py
Traceback (most recent call last):
File "D:\Program\Python\Python日常编程\LifeReopensForGUI\begin.py", line 15, in
mainMenuWindow.show()
TypeError: 'QPushButton' object is not callable
进程已结束,退出代码1
from PyQt5 import QtWidgets, QtGui, QtCore
import MainMenu # 这是窗体文件
import sys
class MainMenuWindow(QtWidgets.QMainWindow, MainMenu.Ui_MainMenu):
def __init__(self):
super(MainMenuWindow, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mainMenuWindow = MainMenuWindow()
mainMenuWindow.show()
sys.exit(app.exec_())
UI文件代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'MainMenu.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QMainWindow
class Ui_MainMenu(object):
def setupUi(self, MainMenu):
MainMenu.setObjectName("MainMenu")
MainMenu.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainMenu)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 801, 271))
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap(":/png/resource Files/人生重开.png"))
self.label.setScaledContents(True)
self.label.setObjectName("label")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 280, 781, 261))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.work = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.work.setObjectName("work")
self.verticalLayout.addWidget(self.work)
self.goToSchool = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.goToSchool.setObjectName("goToSchool")
self.verticalLayout.addWidget(self.goToSchool)
self.show = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.show.setObjectName("show")
self.verticalLayout.addWidget(self.show)
self.study = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.study.setObjectName("study")
self.verticalLayout.addWidget(self.study)
self.openBag = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.openBag.setObjectName("openBag")
self.verticalLayout.addWidget(self.openBag)
self.goToStore = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.goToStore.setObjectName("goToStore")
self.verticalLayout.addWidget(self.goToStore)
MainMenu.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainMenu)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainMenu.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainMenu)
self.statusbar.setObjectName("statusbar")
MainMenu.setStatusBar(self.statusbar)
self.retranslateUi(MainMenu)
QtCore.QMetaObject.connectSlotsByName(MainMenu)
def retranslateUi(self, MainMenu):
_translate = QtCore.QCoreApplication.translate
MainMenu.setWindowTitle(_translate("MainMenu", "主界面"))
self.work.setText(_translate("MainMenu", "工作"))
self.goToSchool.setText(_translate("MainMenu", "去学校"))
self.show.setText(_translate("MainMenu", "显示属性"))
self.study.setText(_translate("MainMenu", "学习"))
self.openBag.setText(_translate("MainMenu", "打开背包"))
self.goToStore.setText(_translate("MainMenu", "去商店"))
D:\Program\Python\venv\Scripts\python.exe D:\Program\Python\Python日常编程\LifeReopensForGUI\begin.py
Traceback (most recent call last):
File "D:\Program\Python\Python日常编程\LifeReopensForGUI\begin.py", line 15, in
mainMenuWindow.show()
TypeError: 'QPushButton' object is not callable
进程已结束,退出代码1
我先在UI文件运行窗体,发现没问题.窗体正常显示.
我把窗体类继承的改为QMainWindow,还是有问题.
该回答引用ChatGPT
这个错误提示是因为在 MainMenu.ui 文件中,您为 QPushButton 控件命名为 work、goToSchool 等,这些名称与 MainMenuWindow 类中的方法名称重复了,导致程序出现错误。
为了解决这个问题,您可以尝试以下方法之一:
1、修改控件名称
您可以在 MainMenu.ui 文件中修改控件的名称,以避免与 MainMenuWindow 类中的方法名称重复。例如,您可以将 work 控件的名称修改为 workButton,将 goToSchool 控件的名称修改为 goToSchoolButton,以此类推。
2、修改方法名称
您也可以修改 MainMenuWindow 类中的方法名称,以避免与 QPushButton 控件的名称重复。例如,您可以将 work 方法的名称修改为 workButtonClicked,将 goToSchool 方法的名称修改为 goToSchoolButtonClicked,以此类推。
修改后的代码如下所示:
from PyQt5 import QtWidgets, QtGui, QtCore
import MainMenu # 这是窗体文件
import sys
class MainMenuWindow(QtWidgets.QMainWindow, MainMenu.Ui_MainMenu):
def __init__(self):
super(MainMenuWindow, self).__init__()
self.setupUi(self)
# 将 QPushButton 控件的 clicked 信号连接到对应的方法上
self.workButton.clicked.connect(self.workButtonClicked)
self.goToSchoolButton.clicked.connect(self.goToSchoolButtonClicked)
self.showButton.clicked.connect(self.showButtonClicked)
self.studyButton.clicked.connect(self.studyButtonClicked)
self.openBagButton.clicked.connect(self.openBagButtonClicked)
self.goToStoreButton.clicked.connect(self.goToStoreButtonClicked)
def workButtonClicked(self):
print("workButtonClicked")
def goToSchoolButtonClicked(self):
print("goToSchoolButtonClicked")
def showButtonClicked(self):
print("showButtonClicked")
def studyButtonClicked(self):
print("studyButtonClicked")
def openBagButtonClicked(self):
print("openBagButtonClicked")
def goToStoreButtonClicked(self):
print("goToStoreButtonClicked")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mainMenuWindow = MainMenuWindow()
mainMenuWindow.show()
sys.exit(app.exec_())
在这个代码中,我们将 QPushButton 控件的名称修改为 workButton、goToSchoolButton 等,并且将这些控件的 clicked 信号连接到对应的方法上,这样就可以避免命名冲突了。