-1

I am writing a program to calculate attributes from a game together. I used PyQt5 for a GUI and SQLite for database. I wrote a file my code in to this file from PyQt5-Designer and one file for a Database access. It looks like this:

#gui.py

from PyQt5.QtCore import QRect, QMetaObject, QCoreApplication
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QComboBox, QWidget, QLabel, QSpinBox, QCheckBox, QMenuBar, QStatusBar
from PyQt5 import QtWidgets
import database_access

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(640, 480)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.l_td2bc = QLabel(self.centralwidget)
        self.l_td2bc.setObjectName(u"l_td2bc")
        self.l_td2bc.setGeometry(QRect(20, 10, 391, 31))
        font3 = QFont()
        font3.setPointSize(12)
        self.CB_pw_1 = QComboBox(self.centralwidget)
        self.CB_pw_1.setObjectName(u"CB_pw_1")
        self.CB_pw_1.setGeometry(QRect(20, 190, 180, 22))
        self.CB_pw_1.setFont(font3)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1119, 21))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))

        #own code
        self.CB_pw_1.addItems(database_access.wp_core_attributes01())

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_())

# database_access.py
import sqlite3

def wp_core_attributes01():
    db_conn = sqlite3.connect('td2_db.db')
    c = db_conn.cursor()
    c.execute("SELECT core_attribute01 FROM 'Wp Core Attributes'")
    data = [item[0] for item in c.fetchall()]
    db_conn.commit()
    db_conn.close()
    return data

This is just a example (just one combobox) a little part. But it is working. I can open the combobox and I can see entries from the database. Now I want to move every on my code from the gui.py to a new file start.py and start it from there. And now here is my problem. I tried this:

start.py
import database_access
from PyQt5 import QtWidgets


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_())


def pw():
    ui.setupUi(MainWindow).CB_pw_1.addItems(database_access.wp_core_attributes01())


pw()

but is it not working, how do I call a function from inside of a class, from a different file? I googled it but I did not find anything like this. Can I do this this way? And if not how can i do this? Thanks for help in advance and sorry for my bad English.

a121
  • 798
  • 4
  • 9
  • 20
  • 1
    Does this answer your question? [Importing a function from a class in another file?](https://stackoverflow.com/questions/6757192/importing-a-function-from-a-class-in-another-file) – pippo1980 Dec 29 '20 at 12:23

1 Answers1

0

You need to create a class in your Start.py like this and you can access any element of your gui as shown in below example

#start.py
import database_access
import gui
from PyQt5.QtCore import QRect, QMetaObject, QCoreApplication
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QComboBox, QWidget, QLabel, QSpinBox, QCheckBox, QMenuBar, QStatusBar
from PyQt5 import QtWidgets
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = gui.Ui_MainWindow()
        self.ui.setupUi()
        self.pw()

    def pw(self):
        # You can access any UI element by using self.ui.<any element name of gui class>
        self.ui.CB_pw_1.addItems(database_access.wp_core_attributes01())


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_()) 

astrick
  • 190
  • 1
  • 9