【发布时间】:2022-01-04 19:24:26
【问题描述】:
我正在处理我的项目,但每次尝试导入变量时都会遇到错误。我尝试了很多东西,但都没有效果。另外我知道最好不要使用 pyuic 自动生成的代码,但现在是时候尝试一些东西了。所以我需要将变量 'name_db' 导入另一个文件我收到错误“ NameError:名称'name_db'未定义”。这是代码
#logged.py from PyQt5 import QtCore, QtGui, QtWidgets
from add_student import Ui_Add_student
import sqlite3
import os, sys
import create
from os import listdir
from os.path import isfile, join
from journal import *
class Ui_Logged(object):
def add(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_Add_student()
self.ui.setupUi(self.window)
self.window.show()
def update(self):
os.execl(sys.executable, sys.executable, *sys.argv)
def open(self):
os.system('python create.py')
os.system('python journal.py')
def setupUi(self, Logged):
path = os.getcwd()
only = os.path.join(path, r"db")
onlyfiles = [f for f in listdir(only) if isfile(join(only, f))]
Logged.setObjectName("Logged")
Logged.resize(337, 300)
self.centralwidget = QtWidgets.QWidget(Logged)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(250, 250, 75, 23))
self.pushButton.setObjectName("pushButton")
#############################################
self.pushButton.clicked.connect(self.add)
#############################################
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(101, 80, 75, 23))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_3.clicked.connect(self.update)
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(20, 10, 201, 41))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItems(onlyfiles)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(10, 80, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_2.clicked.connect(self.open)
Logged.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Logged)
self.menubar.setGeometry(QtCore.QRect(0, 0, 337, 21))
self.menubar.setObjectName("menubar")
Logged.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Logged)
self.statusbar.setObjectName("statusbar")
Logged.setStatusBar(self.statusbar)
os.environ['name_db'] = self.comboBox.currentText()
self.retranslateUi(Logged)
QtCore.QMetaObject.connectSlotsByName(Logged)
def retranslateUi(self, Logged):
_translate = QtCore.QCoreApplication.translate
Logged.setWindowTitle(_translate("Logged", "MainWindow"))
self.pushButton.setText(_translate("Logged", "Додати учня"))
self.pushButton_2.setText(_translate("Logged", "Відкрити"))
self.pushButton_3.setText(_translate("Logged", "Оновити"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Logged = QtWidgets.QMainWindow()
ui = Ui_Logged()
ui.setupUi(Logged)
Logged.show()
sys.exit(app.exec_())
import sys, os
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from datetime import date
def initializeModel(model):
import logged
model.setTable('sportsmen')
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.select()
model.setHeaderData(0, Qt.Horizontal, "Дата")
model.setHeaderData(1, Qt.Horizontal, "Математика")
model.setHeaderData(2, Qt.Horizontal, "Українська мова")
model.setHeaderData(3, Qt.Horizontal, "Інформатика")
def createView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
def findrow(i):
delrow = i.row()
if __name__ == '__main__':
import logged
path = os.getcwd()
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName(os.path.join(path, r"db/", name_db))
model = QSqlTableModel()
delrow = -1
initializeModel(model)
view1 = createView("Table Model (View 1)", model)
view1.clicked.connect(findrow)
dlg = QDialog()
layout = QVBoxLayout()
layout.addWidget(view1)
dlg.resize(500,300)
dlg.setLayout(layout)
dlg.setWindowTitle("Database Demo")
dlg.show()
sys.exit(app.exec_())
【问题讨论】:
-
您可能忽略了它,但是您正在编辑的文件顶部应该有一个 clear 警告,上面写着“除非您知道什么,否则不要编辑它你在做”。这是因为编辑 pyuic 生成的文件是一种不好的做法(有很多原因):这些是自动生成的文件,旨在仅使用> 作为进口。请阅读有关using Designer 的官方指南,因为大多数问题源于尝试编辑这些文件(除了当前答案中指出的问题)。
-
这里所有的问题都是因为随机地把东西放在一起,希望能有效果,而不是花时间先了解基础知识。您确实需要通过一些tutorials 来了解如何将典型的 PyQt 应用程序组合在一起。