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
Forum Updated to NodeBB v4.3 + New Features

Calla function from another file

Scheduled Pinned Locked Moved Solved Qt for Python
7 Posts 2 Posters 640 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