0

I want to make a sport team managing program but I am stuck on this one part. On playertabs.py your supposed to be able to add a new player with a button, this pop up a second window (NewPlayers.py) with the details that needs to be entered. When hitting the add player button the second window (NewPlayers.py) needs to close and all entered information should be saved on the players name that they entered on the playertabs.py window in the form of a list. Multiple players must be added this way.

Main.py codes:

import sys
from PyQt5.uic import loadUi
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QMainWindow
from NewPlayers import Ui_Dialog

#PlayersTab screen
class PlayersTab(QMainWindow):
    def __init__(self):
        super(PlayersTab, self).__init__()
        loadUi("playerstab.ui", self)
        self.addnewplayer.clicked.connect(self.openNewPlayers)

#Go to NewPlayers screen
    def openNewPlayers(self):
        self.window = QtWidgets.QDialog()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self.window)
        self.window.show()


#Go to PlayerTab screen
    def gotoPlayersTab(self):

        widget.setCurrentIndex(widget.currentIndex() + 1)


# main
app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget()
playerstab = PlayersTab()
widget.addWidget(playerstab)


widget.setFixedHeight(480)
widget.setFixedWidth(640)
widget.show()

try:
    sys.exit(app.exec_())
except:
    print("Exiting")

playertab.py code:

    from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(640, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.addnewplayer = QtWidgets.QPushButton(self.centralwidget)
        self.addnewplayer.setGeometry(QtCore.QRect(450, 50, 181, 31))
        self.addnewplayer.setObjectName("addnewplayer")
        self.playerlist = QtWidgets.QListWidget(self.centralwidget)
        self.playerlist.setGeometry(QtCore.QRect(0, 90, 630, 380))
        self.playerlist.setObjectName("playerlist")
        self.matches = QtWidgets.QPushButton(self.centralwidget)
        self.matches.setGeometry(QtCore.QRect(10, 50, 181, 31))
        self.matches.setObjectName("matches")
        self.searchplayer = QtWidgets.QLineEdit(self.centralwidget)
        self.searchplayer.setGeometry(QtCore.QRect(10, 10, 621, 31))
        self.searchplayer.setObjectName("searchplayer")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.addnewplayer.setText(_translate("MainWindow", "Add new player"))
        self.matches.setText(_translate("MainWindow", "Matches"))



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

NewPlayer.py code:

    import sys
from PyQt5 import QtCore, QtGui, QtWidgets



class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(640, 480)
        self.addPhoto = QtWidgets.QPushButton(Dialog)
        self.addPhoto.setGeometry(QtCore.QRect(10, 410, 100, 50))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.addPhoto.setFont(font)
        self.addPhoto.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.addPhoto.setObjectName("addPhoto")
        self.p_name = QtWidgets.QLineEdit(Dialog)
        self.p_name.setEnabled(True)
        self.p_name.setGeometry(QtCore.QRect(400, 36, 200, 44))
        self.p_name.setObjectName("p_name")
        self.p_prfname = QtWidgets.QLineEdit(Dialog)
        self.p_prfname.setGeometry(QtCore.QRect(400, 80, 200, 44))
        self.p_prfname.setObjectName("p_prfname")
        self.p_height = QtWidgets.QLineEdit(Dialog)
        self.p_height.setGeometry(QtCore.QRect(400, 168, 200, 44))
        self.p_height.setObjectName("p_height")
        self.p_nr = QtWidgets.QLineEdit(Dialog)
        self.p_nr.setGeometry(QtCore.QRect(400, 212, 200, 44))
        self.p_nr.setObjectName("p_nr")
        self.p_placeob = QtWidgets.QLineEdit(Dialog)
        self.p_placeob.setGeometry(QtCore.QRect(400, 256, 200, 44))
        self.p_placeob.setObjectName("p_placeob")
        self.p_weight = QtWidgets.QLineEdit(Dialog)
        self.p_weight.setGeometry(QtCore.QRect(400, 300, 200, 44))
        self.p_weight.setObjectName("p_weight")
        self.back = QtWidgets.QPushButton(Dialog)
        self.back.setGeometry(QtCore.QRect(280, 410, 100, 50))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.back.setFont(font)
        self.back.setObjectName("back")

        #addplayer Button
        self.addPlayer = QtWidgets.QPushButton(Dialog, clicked=lambda: self.savePlayer())

        self.addPlayer.setGeometry(QtCore.QRect(520, 410, 100, 50))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.addPlayer.setFont(font)
        self.addPlayer.setObjectName("addPlayer")
        self.p_dob = QtWidgets.QLineEdit(Dialog)
        self.p_dob.setGeometry(QtCore.QRect(400, 124, 200, 44))
        self.p_dob.setObjectName("p_dob")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)


    def savePlayer(self):
        # blank list to hold player info
        playerInfo = []
        # loop through data and pull out each info
        playerInfo.append(self.p_name)
        playerInfo.append(self.p_prfname)
        playerInfo.append(self.p_dob)
        playerInfo.append(self.p_height)
        playerInfo.append(self.p_nr)
        playerInfo.append(self.p_placeob)
        playerInfo.append(self.p_weight)

        p_name = self.p_name.text()

        print(p_name)


        # close window
        # NewPlayers.close()

        from playerstab import Ui_MainWindow


        # self.ui.playerlist.addItem(player)

        from Main import PlayersTab
        from Main import widget

        playerstab = PlayersTab()
        widget.addWidget(playerstab)
        widget.setCurrentIndex(widget.currentIndex()+1)

        #add player
        player = p_name
        playerstab.playerlist.addItem(player)




    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "CourseWork"))
        self.addPhoto.setText(_translate("Dialog", "Add Photo"))
        self.p_name.setText(_translate("Dialog", "Full name & Surname"))
        self.p_prfname.setText(_translate("Dialog", "Preferred Name"))
        self.p_height.setText(_translate("Dialog", "Height"))
        self.p_nr.setText(_translate("Dialog", "Cellphone number"))
        self.p_placeob.setText(_translate("Dialog", "Place of Birth"))
        self.p_weight.setText(_translate("Dialog", "Weight"))
        self.back.setText(_translate("Dialog", "Back"))
        self.addPlayer.setText(_translate("Dialog", "Add Player"))
        self.p_dob.setText(_translate("Dialog", "Date of Birth (DD/MM/YY)"))




if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
  • The code of `NewPlayer.py` has wrong indentation or is missing important parts, please [edit] the question and fix all code parts and ensure that they are properly displayed by following the suggestions about [formatting code](//meta.stackoverflow.com/a/251362) and checking the question preview before submitting. Also be aware that you're probably following a youtube tutorial ("code first with Hala"?) that is known to provide a lot of terrible suggestions and bad practices, and you should really avoid it at all. – musicamante May 01 '22 at 15:55
  • I fixed the NewPlayer.py file – VatieKakie May 01 '22 at 16:01
  • Unfortunately you're following lots of those bad suggestions cited above, so answering your question is rather complex and requires rewriting almost all of your code. I can give you 2 important suggestions, though: 1. QStackedWidget works like a tab widget: added pages are supposed to be reused, so you should not always create new ones, but eventually switch to existing ones (for instance, to go back to the "main screen", use `setCurrentIndex(0)`; 2. do *not* edit pyuic files, follow the official guidelines about [using Designer](//www.riverbankcomputing.com/static/Docs/PyQt5/designer.html) – musicamante May 01 '22 at 16:11
  • Start by reading [this related question](https://stackoverflow.com/q/69532883) which addresses some similar aspects (most of its problems are caused by the same terrible tutorial). Note that that answer is written for PySide, but the concepts are the same (the main difference is that there they use QUiLoader, which you don't need since you're using pyuic form classes). Then please study the documentation about [QStackedWidget](https://doc.qt.io/qt-5/qstackedwidget.html) to better understand how it works. – musicamante May 01 '22 at 16:14

0 Answers0