【问题标题】:Calling function from an other class in python [duplicate]从python中的其他类调用函数[重复]
【发布时间】:2021-04-06 01:36:21
【问题描述】:

我正在编写一个程序来一起计算游戏的属性。 我使用 PyQt5 作为 GUI 和 SQLite 作为数据库。我从 PyQt5-Designer 将我的代码写入该文件中,并为数据库访问编写了一个文件。它看起来像这样:

#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

这只是一个示例(只是一个组合框)的一小部分。但它正在工作。我可以打开组合框,我可以看到数据库中的条目。现在我想将我的代码中的每一个从 gui.py 移动到一个新文件 start.py 并从那里启动它。现在这是我的问题。我试过这个:

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

但是它不起作用,我如何从一个类内部,从不同的文件调用一个函数? 我用谷歌搜索了它,但我没有找到这样的东西。我可以这样做吗?如果不是,我该怎么做? 提前感谢您的帮助,并为我的英语不好感到抱歉。

【问题讨论】:

标签: python sqlite pyqt5


【解决方案1】:

您需要像这样在 Start.py 中创建一个类,并且您可以访问 gui 的任何元素,如下例所示

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

【讨论】:

  • 感谢您的回答,这正是我所需要的!你是我的英雄;)
  • 如果您认为正确,您可以接受答案。
猜你喜欢
  • 1970-01-01
  • 2020-12-15
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 2016-05-27
相关资源
最近更新 更多