DD.close() NameError: 全局名称 'DD' 未定义
Posted
技术标签:
【中文标题】DD.close() NameError: 全局名称 \'DD\' 未定义【英文标题】:DD.close() NameError: global name 'DD' is not definedDD.close() NameError: 全局名称 'DD' 未定义 【发布时间】:2018-03-08 17:14:00 【问题描述】:pyqt4,成功登录后我的登录窗口关闭并打开下一个窗口。即很好,但是如果我想关闭下一个窗口并转到登录窗口,则会显示错误
这是我的代码
登录.py
import DD
from PyQt4.QtGui import QMessageBox
from PyQt4.QtGui import *
from LoginError import LoginError
import os
class Ui_Login(object):
def closeEvent(self, event):
# type: (close) -> object
QtGui.QMainWindow.closeEvent(self, event)
self.saveLayout()
def loginCheck(self):
username = self.lineEdit_adminusername.text()
password = self.lineEdit_adminpassword.text()
for line in open("password.txt", "r").readlines(): # Read the lines
# str = in.readlines();
# str1 = in.readlines();
loginCheck_info = line.split() # Split on the space, and store the results in a list of two strings
# if username == str and password == str1:
if username == loginCheck_info[0] and password == loginCheck_info[1]:
print("Correct credentials!")
try:
self.window = QtGui.QMainWindow()
self.ui = DD.Ui_DD()
self.ui.setupUi(self.window)
self.window.show()
Login.close()
return True
except LoginError:
sys.exit()
sys.exit(app.exec_())
else:
print "Incorrect credentials!!!"
widget = QWidget()
message = QtGui.QMessageBox.warning(widget, "Warning", "Please enter valid username and password")
return False
# print("Incorrect credentials.")
# return False
line.close()
def reboot(self, event):
widget = QWidget()
message = QtGui.QMessageBox.question(widget, "Reboot", "Do you really want to Reboot?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if message == QtGui.QMessageBox.Yes:
print "Rebooting..........."
os.system("reboot")
else:
print "Continue"
global true;
true = 1;
def shutdown(self, event):
widget = QWidget()
message = QtGui.QMessageBox.question(widget, "Shutdown", "Do you really want to Shutdown?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if message == QtGui.QMessageBox.Yes:
print "Going to shutting down..........."
os.system("poweroff")
else:
print "Continue"
global true;
true = 1;
self.btn_adminlogin = QtGui.QPushButton(self.frame)
self.btn_adminlogin.setObjectName(_fromUtf8("btn_adminlogin"))
self.btn_adminlogin.clicked.connect(self.loginCheck)
self.gridLayout_2.addWidget(self.btn_adminlogin, 1, 0, 1, 1)
self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1)
DD.py
from PyQt4 import QtCore, QtGui
import Login
from PyQt4.QtGui import QMessageBox
from PyQt4.QtGui import *
import os
import time
class Ui_DD(object):
def Start(self):
global true;
true = 1;
print "Start"
widget = QWidget()
message = QtGui.QMessageBox.information(widget, "Welcome", "Data Transfer Start")
while true == 1:
path = "/home/greensystem/PycharmProjects/data/"
itemsTextList = 0
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)):
itemsTextList += 1
print "Total number of files in: " + path + " -", itemsTextList
time.sleep(1)
out = str(itemsTextList)
self.textBrowser.setText(out)
QtGui.qApp.processEvents()
def Stop(self):
global true;
true = 0;
print "Stop"
widget = QWidget()
QMessageBox.warning(widget, "Welcome", "Data Transfer Stop")
# sys.exit()
def close(self, event):
#global DD
widget = QWidget()
message = QtGui.QMessageBox.question(widget, "Quit", "Do you really want to quit?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if message == QtGui.QMessageBox.Yes:
print "exit"
self.window = QtGui.QMainWindow()
self.ui = Login.Ui_Login()
self.ui.setupUi(self.window)
self.window.show()
#DD.hide()
DD.close()
else:
print "Continue"
global true;
true = 1;
self.label_7 = QtGui.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(10, 460, 131, 41))
self.label_7.setStyleSheet(_fromUtf8("image: url(:/newPrefix/index.jpeg);"))
self.label_7.setText(_fromUtf8(""))
self.label_7.setObjectName(_fromUtf8("label_7"))
self.label_7.mousePressEvent = self.close
【问题讨论】:
我是 python 新手,请帮助我。 您能否更具体地说明错误以及您猜它失败的原因?无论如何,我认为如果辅助窗口以任何方式由主要对象维持,则可能是这样。但不知道。 错误是正确的凭据!退出 Traceback(最近一次调用最后一次):文件“/home/jai-bholenath/Downloads/withBlueshade/DD.py”,第 73 行,关闭 DD.close() NameError: global name 'DD' is not defined 登录完成并移动到第二个窗口并正确关闭登录窗口。但是,如果注销第二个未关闭的窗口。我知道有一些愚蠢的逻辑,但我无法理解这一点.. 是因为您正在执行 DD.close() 但这仅在您从主对象导入 DD 时才有意义。你关闭了上下文中不存在的东西。只是想办法关闭自己。我不知道python,但类似 self.window.close() ?然后再次启动主程序。 【参考方案1】:我发现您的程序存在两个主要问题。
首先,为什么两个 Ui 相互依赖?您已经在 Login.py 中完成了 import DD
和在 DD.py 中完成了 import Login
这对我来说毫无意义。您应该做的是拥有第三个文件,例如 Main.py
并将 Login 和 DD 都导入其中。然后您可以轻松地从一个窗口跳到另一个窗口。
其次,在 DD.py 中,没有名为 DD
的 object。您的班级名为Ui_DD
,位于DD.py 中。所以如果你打电话给DD.close()
,python 应该认为DD
是什么?因此投诉NameError
。
一个简单的类比:考虑一家名为“XYZ Inc.”的公司。还有一个叫“P先生”的员工。您正试图通过说“XYZ Inc.,滚出去!”来摆脱“P 先生”。这没有任何意义。在您的情况下,DD.py 是“XYZ Inc”,而“Ui_DD”是“P 先生”。
【讨论】:
感谢马库斯先生。我会尝试你的概念并尽快回复。再次感谢 我创建了 main.py 新文件并在主文件中调用这两个文件。 所以现在您可以将登录和其他小部件放在一个循环中,可以这么说。 太棒了。我建议您提供一个简单的代码来显示它如何解决您的问题并接受它。这样你和网站都会成长...... :)以上是关于DD.close() NameError: 全局名称 'DD' 未定义的主要内容,如果未能解决你的问题,请参考以下文章