我正在尝试设计Garage App。该应用程序有两个选项(登录,注册) 当用户选择登录时,此Widget称为“欢迎窗口”。
程序应关闭“欢迎窗口”并打开名为“登录”的其他窗口小部件,然后“登录”窗口小部件有两个按钮:“确定”和“返回”。当用户按下“返回”时,它应该关闭“登录”小部件并重新打开“欢迎窗口”。但它打开'欢迎窗口'而没有关闭'登录窗口' 并引发错误
NameError:全局名称“Form”未定义为“WelcomeWidget”
的代码
from PyQt4 import QtCore, QtGui
import SignIN
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig,
_encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def SignINF(self):
self.SignINWindow = QtGui.QWidget()
self.ui = SignIN.Ui_Form()
self.ui.setupUi(self.SignINWindow)
self.SignINWindow.show()
Form.close()
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(500, 360)
Form.setStyleSheet(_fromUtf8("background-image:
url(:/img/Screenshot from 2017-09-20 17-37-17.png);"))
self.pushButton_2 = QtGui.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(120, 290, 75, 31))
self.pushButton_2.setStyleSheet(_fromUtf8("color: rgb(255,
255, 255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.pushButton_2.clicked.connect(self.SignINF)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(29, 291, 75, 31))
self.pushButton.setStyleSheet(_fromUtf8("color: rgb(255, 255,
255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(30, 50, 458, 34))
font = QtGui.QFont()
font.setFamily(_fromUtf8("DejaVu Serif"))
font.setPointSize(22)
font.setBold(False)
font.setItalic(False)
font.setWeight(9)
self.label.setFont(font)
self.label.setStyleSheet(_fromUtf8("color: rgb(255, 255,
255);\n"
"font: 75 22pt \"DejaVu Serif\";\n"
""))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(360, 330, 131, 20))
self.label_2.setStyleSheet(_fromUtf8("color: rgb(255, 255,
255);\n"
"font: 63 italic 10pt \"URW Chancery L\";"))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
self.pushButton_2.setText(_translate("Form", "Sign In", None))
self.pushButton.setText(_translate("Form", "Sign Up", None))
self.label.setText(_translate("Form", "Welcome To Our Smart
Garage", None))
self.label_2.setText(_translate("Form", "Power By AIET
Students", None))
import iamge_rc
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
“登录小工具”代码
from PyQt4 import QtCore, QtGui
import WelFrame
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def Back(self):
self.WelcomWindow = QtGui.QWidget()
self.ui = WelFrame.Ui_Form()
self.ui.setupUi(self.WelcomWindow)
self.WelcomWindow .show()
Form.close()
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(500, 360)
Form.setStyleSheet(_fromUtf8("background-image: url(:/img/Screenshot from 2017-09-20 17-37-17.png);"))
self.gridLayout = QtGui.QGridLayout(Form)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.label = QtGui.QLabel(Form)
self.label.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.label.setObjectName(_fromUtf8("label"))
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.lineEdit = QtGui.QLineEdit(Form)
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
self.lineEdit_2 = QtGui.QLineEdit(Form)
self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
self.gridLayout.addWidget(self.lineEdit_2, 1, 1, 1, 1)
self.pushButton_2 = QtGui.QPushButton(Form)
self.pushButton_2.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.pushButton_2.clicked.connect(self.Back)
self.gridLayout.addWidget(self.pushButton_2, 2, 0, 1, 1)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1)
self.label_2 = QtGui.QLabel(Form)
self.label_2.setStyleSheet(_fromUtf8("color: rgb(255, 255, 255);\n"
"font: 63 oblique 12pt \"URW Gothic L\";"))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
self.label.setText(_translate("Form", "Enter User Name", None))
self.pushButton_2.setText(_translate("Form", "Cancel", None))
self.pushButton.setText(_translate("Form", "OK", None))
self.label_2.setText(_translate("Form", "Enter Password", None))
import iamge_rc
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
导入SignIn - > SignIN的代码
导入WelFrame->欢迎窗口代码
答案 0 :(得分:0)
我不断建议您不要修改Qt Designer创建的文件。这些类面向设计,所以最优雅的是创建一个实现逻辑并使用以前设计的类,这些类必须具有以下结构:
class LogicClass(QWidget, Ui_SomeDesign):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
因此,我建议您删除对设计类的所有修改,或使用pyuic创建它们。
在您的情况下,我建议创建另一个名为main.py的文件,该文件与其他脚本位于同一文件夹中:
.
├── main.py <-- new file
├── SignIn.py
└── WelFrame.py
在这个文件中,我们创建了实现设计逻辑的类,并实现了一个执行关闭当前小部件和显示新小部件的任务的方法
import sys
from PyQt4.QtGui import QWidget, QApplication
from SignIn import Ui_Form as SignInForm
from WelFrame import Ui_Form as WelFrameForm
class Sign(QWidget, SignInForm):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
class WelFrame(QWidget, WelFrameForm):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
def foo(w1, w2):
w1.show()
w2.hide()
if __name__ == '__main__':
app = QApplication(sys.argv)
wel = WelFrame()
sign = Sign()
wel.pushButton_2.clicked.connect(lambda : foo(sign, wel))
sign.pushButton_2.clicked.connect(lambda: foo(wel, sign))
wel.show()
sys.exit(app.exec_())