Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Calla function from another file

Calla function from another file

Scheduled Pinned Locked Moved Solved Qt for Python
7 Posts 2 Posters 1.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Dhruv_98
    wrote on last edited by
    #1

    I am creating a gui based fantasy game using python and pyqt5.
    I'm done with 95 % work and getting stuck while calling a function from another file.
    While creating my team when I double click on a players name it gets selected in my team but if I single click on a player's name I want it to open a new gui window which shows the stats of the selected player. For this purpose I have created a new file with the gui design statements and the function to work just the way I want. When I run this file it works properly but I am unable to call it in my actual program. The program just quits when I single click on a players name without the second gui window opening162006355920.png 162006353745.png 162006347247.png
    In the first image Showstats is the function where I'm calling the function from another file and I am facing problem in that part.
    Second and third images are the screenshots of another file.

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      Please post your code as text using coding tags (the </> button does that for you).

      One issue I can see is that you overwrote show which is a QWidget member function. This is a bad idea without calling the base class version.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • D Offline
        D Offline
        Dhruv_98
        wrote on last edited by
        #3
        # -*- coding: utf-8 -*-
        
        # Form implementation generated from reading ui file 'page1.ui'
        #
        # Created by: PyQt5 UI code generator 5.15.4
        #
        # 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
        
        
        class Ui_MainWindow(object):
            def setupUi(self, MainWindow):
                MainWindow.setObjectName("MainWindow")
                MainWindow.resize(800, 600)
                self.centralwidget = QtWidgets.QWidget(MainWindow)
                self.centralwidget.setObjectName("centralwidget")
                self.Selection_box = QtWidgets.QListWidget(self.centralwidget)
                self.Selection_box.setGeometry(QtCore.QRect(50, 220, 251, 331))
                self.Selection_box.setObjectName("Selection_box")
                self.Selected_box = QtWidgets.QListWidget(self.centralwidget)
                self.Selected_box.setGeometry(QtCore.QRect(500, 220, 251, 331))
                self.Selected_box.setObjectName("Selected_box")
                self.Credits_a = QtWidgets.QLineEdit(self.centralwidget)
                self.Credits_a.setGeometry(QtCore.QRect(150, 140, 41, 22))
                self.Credits_a.setObjectName("Credits_a")
                self.Team_Name = QtWidgets.QLabel(self.centralwidget)
                self.Team_Name.setGeometry(QtCore.QRect(510, 190, 71, 16))
                self.Team_Name.setObjectName("Team_Name")
                self.Name_display = QtWidgets.QLineEdit(self.centralwidget)
                self.Name_display.setGeometry(QtCore.QRect(590, 190, 113, 22))
                self.Name_display.setObjectName("Name_display")
                self.Points_Available = QtWidgets.QLabel(self.centralwidget)
                self.Points_Available.setGeometry(QtCore.QRect(60, 140, 91, 16))
                self.Points_Available.setObjectName("Points_Available")
                self.Your_Selection = QtWidgets.QLabel(self.centralwidget)
                self.Your_Selection.setGeometry(QtCore.QRect(60, 20, 81, 16))
                self.Your_Selection.setObjectName("Your_Selection")
                self.Credits_u = QtWidgets.QLineEdit(self.centralwidget)
                self.Credits_u.setGeometry(QtCore.QRect(580, 140, 41, 22))
                self.Credits_u.setObjectName("Credits_u")
                self.Points_used = QtWidgets.QLabel(self.centralwidget)
                self.Points_used.setGeometry(QtCore.QRect(510, 140, 71, 16))
                self.Points_used.setObjectName("Points_used")
                self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
                self.horizontalLayoutWidget.setGeometry(QtCore.QRect(50, 40, 711, 80))
                self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
                self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
                self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
                self.horizontalLayout.setObjectName("horizontalLayout")
                self.Wk_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
                self.Wk_label.setObjectName("Wk_label")
                self.horizontalLayout.addWidget(self.Wk_label)
                self.Wk_le = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
                self.Wk_le.setEnabled(True)
                self.Wk_le.setObjectName("Wk_le")
                self.horizontalLayout.addWidget(self.Wk_le)
                self.Bat_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
                self.Bat_label.setObjectName("Bat_label")
                self.horizontalLayout.addWidget(self.Bat_label)
                self.Bat_le = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
                self.Bat_le.setEnabled(True)
                self.Bat_le.setObjectName("Bat_le")
                self.horizontalLayout.addWidget(self.Bat_le)
                self.Ar_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
                self.Ar_label.setObjectName("Ar_label")
                self.horizontalLayout.addWidget(self.Ar_label)
                self.Ar_le = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
                self.Ar_le.setEnabled(True)
                self.Ar_le.setObjectName("Ar_le")
                self.horizontalLayout.addWidget(self.Ar_le)
                self.Bowl_label = QtWidgets.QLabel(self.horizontalLayoutWidget)
                self.Bowl_label.setObjectName("Bowl_label")
                self.horizontalLayout.addWidget(self.Bowl_label)
                self.Bowl_le = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
                self.Bowl_le.setEnabled(True)
                self.Bowl_le.setObjectName("Bowl_le")
                self.horizontalLayout.addWidget(self.Bowl_le)
        
        
                self.radiobutton_5 = QtWidgets.QRadioButton(self.centralwidget)
                self.radiobutton_5.setGeometry(QtCore.QRect(184, 200, 57, 20))
                self.radiobutton_5.setObjectName("radiobutton_5")
                self.radiobutton_6 = QtWidgets.QRadioButton(self.centralwidget)
                self.radiobutton_6.setGeometry(QtCore.QRect(56, 200, 58, 20))
                self.radiobutton_6.setObjectName("radiobutton_6")
                self.radiobutton_7 = QtWidgets.QRadioButton(self.centralwidget)
                self.radiobutton_7.setGeometry(QtCore.QRect(247, 200, 58, 20))
                self.radiobutton_7.setObjectName("radiobutton_7")
                self.radiobutton_8 = QtWidgets.QRadioButton(self.centralwidget)
                self.radiobutton_8.setGeometry(QtCore.QRect(120, 200, 58, 20))
                self.radiobutton_8.setObjectName("radiobutton_8")
        
        
                MainWindow.setCentralWidget(self.centralwidget)
                self.menubar = QtWidgets.QMenuBar(MainWindow)
                self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
                self.menubar.setObjectName("menubar")
                self.menuFile = QtWidgets.QMenu(self.menubar)
                self.menuFile.setObjectName("menuFile")
        
        
                MainWindow.setMenuBar(self.menubar)
                self.statusbar = QtWidgets.QStatusBar(MainWindow)
                self.statusbar.setObjectName("statusbar")
                MainWindow.setStatusBar(self.statusbar)
        
        
                self.actionNew_Team = QtWidgets.QAction(MainWindow)
                self.actionNew_Team.setObjectName("actionNew_Team")
                self.actionSave_Team = QtWidgets.QAction(MainWindow)
                self.actionSave_Team.setObjectName("actionSave_Team")
                self.actionEvaluate_Team = QtWidgets.QAction(MainWindow)
                self.actionEvaluate_Team.setObjectName("actionEvaluate_Team")
                self.actionOpen_Team = QtWidgets.QAction(MainWindow)
                self.actionOpen_Team.setObjectName("actionOpen_Team")
                self.menuFile.addAction(self.actionNew_Team)
                self.menuFile.addAction(self.actionSave_Team)
                self.menuFile.addAction(self.actionEvaluate_Team)
                self.menuFile.addAction(self.actionOpen_Team)
                self.menubar.addAction(self.menuFile.menuAction())
        
                self.Selection_box.itemDoubleClicked.connect(self.removelist1)
                self.Selection_box.itemClicked.connect(self.showstats)
                self.Selected_box.itemDoubleClicked.connect(self.removelist2)
        
                self.radiobutton_5.toggled.connect(self.ctg)
                self.radiobutton_6.toggled.connect(self.ctg)
                self.radiobutton_7.toggled.connect(self.ctg)
                self.radiobutton_8.toggled.connect(self.ctg)
        
                self.menuFile.triggered[QtWidgets.QAction].connect(self.menu)
        
                self.bat=0
                self.bowl=0
                self.ar=0
                self.wk=0
                self.avl=1100
                self.used=0
                self.Selection_box.clear()
                self.Selected_box.clear()
        
                self.retranslateUi(MainWindow)
                QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
            def retranslateUi(self, MainWindow):
                _translate = QtCore.QCoreApplication.translate
                MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
                self.Team_Name.setText(_translate("MainWindow", "Team Name:"))
                self.Points_Available.setText(_translate("MainWindow", "Points Available:"))
                self.Your_Selection.setText(_translate("MainWindow", "Your Selection"))
                self.Points_used.setText(_translate("MainWindow", "Points Used:"))
                self.Wk_label.setText(_translate("MainWindow", "Wk :"))
                self.Bat_label.setText(_translate("MainWindow", "Bat : "))
                self.Ar_label.setText(_translate("MainWindow", "Ar :"))
                self.Bowl_label.setText(_translate("MainWindow", "Bowl :"))
                self.radiobutton_5.setText(_translate("MainWindow", "Ar"))
                self.radiobutton_6.setText(_translate("MainWindow", "Wk"))
                self.radiobutton_7.setText(_translate("MainWindow", "Bowl"))
                self.radiobutton_8.setText(_translate("MainWindow", "Bat"))
                self.menuFile.setTitle(_translate("MainWindow", "File"))
                self.actionNew_Team.setText(_translate("MainWindow", "New Team"))
                self.actionSave_Team.setText(_translate("MainWindow", "Save Team"))
                self.actionEvaluate_Team.setText(_translate("MainWindow", "Evaluate Team"))
                self.actionOpen_Team.setText(_translate("MainWindow", "Open Team"))
        
            def menu(self,action):
                txt=(action.text())
                print("q")
                    
                if txt == 'New Team':
                    print("s")
                    self.bat=0
                    self.bowl=0
                    self.ar=0
                    self.wk=0
                    self.avl=1100
                    self.used=0
                    self.Selection_box.clear()
                    self.Selected_box.clear()
                    
                    text, ok=QtWidgets.QInputDialog.getText(MainWindow, "Team", "Enter name of team:")
                    if ok:
                        self.Name_display.setText(str(text))
                    self.show()
        
                if txt=='Save Team':
                    print('b')
                    count=self.Selected_box.count()
                    selected=""
                    for i in range(count):
                        selected+=self.Selected_box.item(i).text()
                        if i<count:
                            selected+=","
                    self.saveteam(self.Name_display.text(),selected,self.used)
        
                if txt == 'Open Team':
                    self.bat=0
                    self.bowl=0
                    self.ar=0
                    self.wk=0
                    self.avl=1100
                    self.used=0
                    self.Selection_box.clear()
                    self.Selected_box.clear()
                    self.show()
                    self.openteam()
        
                if txt == 'Evaluate Team':
                    from dlgscore import Ui_Dialog
                    Dialog = QtWidgets.QDialog()
                    ui = Ui_Dialog()
                    ui.setupUi(Dialog)
                    ret = Dialog.exec()
        
                    
            def show(self):
                self.Bat_le.setText(str(self.bat))
                self.Bowl_le.setText(str(self.bowl))
                self.Wk_le.setText(str(self.wk))
                self.Ar_le.setText(str(self.ar))
                self.Credits_a.setText(str(self.avl))
                self.Credits_u.setText(str(self.used))
        
        
            def showstats(self,item):
                from Stats import Ui_MainWindow
                print('a')
                MainWindow = QtWidgets.QMainwindow()
                ui = Ui_MainWindow()
                print('f')
                ui.setupUi(MainWindow)
                ret = MainWindow.exec()
                print("a")
                
        
        
            def criteria(self,ctgr,item):
                msg=''
                if ctgr=="Bat" and self.bat>=5:msg="Batsmen not more than 5"
                if ctgr=="Bowl" and self.bowl>=5:msg="Bowlers not more than 5"
                if ctgr=="AR" and self.ar>=3:msg="Allrounders not more than 3"
                if ctgr=="Wk" and self.wk>=1:msg="Wicketkeepers not more than 1"
                if msg!='':
                    #msg="You Have Exhausted your Points"
                    self.showdlg(msg)
                    return False
                
                if self.avl<=0:
                    msg="You Have Exhausted your Points"
                    self.showdlg(msg)
                    return False
                
                if ctgr=="Bat":self.bat+=1
                if ctgr=="Bowl":self.bowl+=1
                if ctgr=="AR":self.ar+=1
                if ctgr=="Wk":self.wk+=1
        
                
                sql="SELECT Value from Stats where Player='"+item.text()+"'"
                cur=conn.execute(sql)
                row=cur.fetchone()
                self.avl-=int(row[0])
                self.used+=int(row[0])
                return True
        
        
            def removelist1(self,item):
                
                ctgr=''
                if self.radiobutton_8.isChecked()==True:
                    ctgr='Bat'
                if self.radiobutton_7.isChecked()==True:
                    ctgr='Bowl'
                if self.radiobutton_5.isChecked()==True:
                    ctgr='AR'
                if self.radiobutton_6.isChecked()==True:
                    ctgr='Wk'
                ret = self.criteria(ctgr,item)
                if ret==True:
                    self.Selection_box.takeItem(self.Selection_box.row(item))
                    self.Selected_box.addItem(item.text())
                    self.show()
                    
        
        
            def ctg(self):
                ctgr=''
                if self.radiobutton_8.isChecked()==True:
                    ctgr='Bat'
                elif self.radiobutton_7.isChecked()==True:
                    ctgr='Bowl'
                elif self.radiobutton_5.isChecked()==True:
                    ctgr='AR'
                elif self.radiobutton_6.isChecked()==True:
                    ctgr='Wk'
                self.fillList(ctgr)
                
            def removelist2(self,item):
                self.Selected_box.takeItem(self.Selected_box.row(item))
                
                curs = conn.execute("SELECT Player,Value,Category from Stats where Player='"+item.text()+"'")
                row=curs.fetchone()
                self.avl=self.avl+int(row[1])
                self.used=self.used-int(row[1])
                ctgr=row[2]
                if ctgr=="Bat":
                    self.bat-=1
                    if self.radiobutton_8.isChecked()==True:self.Selection_box.addItem(item.text())
                if ctgr=="Bowl":
                    self.bowl-=1
                    if self.radiobutton_7.isChecked()==True:self.Selection_box.addItem(item.text())
                if ctgr=="AR":
                    self.ar-=1
                    if self.radiobutton_5.isChecked()==True:self.Selection_box.addItem(item.text())
                if ctgr=="Wk":
                    self.wk-=1
                    if self.radiobutton_6.isChecked()==True:self.Selection_box.addItem(item.text())
                self.show()  
        
        
            def fillList(self,ctgr):
                if self.Name_display.text()=='':
                    self.showdlg("Enter name of team")
                    return
                
                self.Selection_box.clear()
                sql="SELECT player from Stats where category='"+ctgr+"';"
                cur=conn.execute(sql)
                for row in cur:
                    selected=[]
                    for i in range(self.Selected_box.count()):
                        selected.append(self.Selected_box.item(i).text())
                    if row[0] not in selected:self.Selection_box.addItem(row[0])
                    
        
            def openteam(self):
               
                sql="select Name from Teams;"
                cur = conn.execute(sql)
                teams=[]
                for row in cur:
                    teams.append(row[0])
                
                team, ok=QtWidgets.QInputDialog.getItem(MainWindow,"Dream","Choose A Team",teams,0,False)
                if ok and team:
                    self.Name_display.setText(team)
                
                sql1="SELECT Players,Value from Teams where Name='"+team+"';"
                cur = conn.execute(sql1)
                row=cur.fetchone()
                selected=row[0].split(',')
                self.Selected_box.addItems(selected)
                self.used=row[1]
                
                self.avl=1000-row[1]
                count=self.Selected_box.count()
        
                ##iterate to count no. of specific players
        
                for i in range(count-1):
                    player=self.Selected_box.item(i).text()
                    sql="SELECT Category from Stats where Player='"+player+"';"
                    
                    curs = conn.execute(sql)
                    
                    row=curs.fetchone()
                    ctgr=row[0]
                    if ctgr=="Bat":self.bat+=1
                    if ctgr=="Bowl":self.bowl+=1
                    if ctgr=="Ar":self.ar+=1
                    if ctgr=="Wk":self.wk+=1  
                self.show()
                
        
        
        
                
        
            def saveteam(self,Name,player,Value):
                if self.bat+self.bowl+self.ar+self.wk!=11:
                    self.showdlg("Insufficient players")
                    return
                
                sql="INSERT INTO Teams (Name,Players,Value) VALUES ('"+Name+"','"+player+"','"+str(Value)+"');"
                try:
                    cur = conn.execute(sql)
                    self.showdlg("Team Saved Succesfully")
                    conn.commit()
                except:
                    self.showdlg("Error in Operation")
                    conn.rollback()   
                
                
            def showdlg(self,msg):
                Dialog=QtWidgets.QMessageBox()
                Dialog.setText(msg)
                Dialog.setWindowTitle("Dream Team selector")
                ret=Dialog.exec()
        
        
        if __name__ == "__main__":
            import sys
            import sqlite3
            conn = sqlite3.connect('Fpx_11.db')
            app = QtWidgets.QApplication(sys.argv)
            MainWindow = QtWidgets.QMainWindow()
            ui = Ui_MainWindow()
            ui.setupUi(MainWindow)
            MainWindow.show()
            sys.exit(app.exec_())
        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Another thing that looks wrong: you are calling exec on a QMainWindow instance. The only widgets that have that method are those coming from QDialog.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          D 1 Reply Last reply
          0
          • SGaistS SGaist

            Another thing that looks wrong: you are calling exec on a QMainWindow instance. The only widgets that have that method are those coming from QDialog.

            D Offline
            D Offline
            Dhruv_98
            wrote on last edited by
            #5

            @SGaist Could you guide me in correcting both the errors?

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #6

              Rename show to something more meaningful.
              Use QDialog as base class for your base class.

              One other note: did you notice the warning in the header of your Python script ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              D 1 Reply Last reply
              0
              • SGaistS SGaist

                Rename show to something more meaningful.
                Use QDialog as base class for your base class.

                One other note: did you notice the warning in the header of your Python script ?

                D Offline
                D Offline
                Dhruv_98
                wrote on last edited by
                #7

                @SGaist Thank You so much for your help and time. My problem got solved. As you suggested, I used QDialog as a base class for my other script and everything worked out fine. After that I faced some minor issues but they were solved and now my program runs exactly the way I want.

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved