这个问题在这里已有答案:
我想打开一个在注册文件中表示的表单,该表单通过登录窗口(main.py)中的单击注册按钮打开,但是当注册表单关闭时,它不能在同一会话中再次打开。
但我必须关闭整个程序,然后再打开它,这样我就可以只删除一次寄存器......依此类推。
以及如何成为主要模型的注册表格子。
如果您需要在打开应用程序时注册某些用户,请关闭表单并在同一应用程序中执行一些事务。然后通过单击注册按钮以打开其来返回注册另一个人,问题是寄存器文件未再次导入,因此不会打开注册表单。
那么我该如何解决这个问题,以便我可以打开注册表单或我导入的任何其他形式(在同一个会话中)而不关闭。该程序并再次打开它。
此文件显示为main.py:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton
from PyQt5.QtGui import QPixmap, QIcon
app = QApplication(sys.argv)
mainRoot = QWidget()
mainRoot.setWindowTitle('Login')
mainRoot.setWindowIcon(QIcon('image\icon2.png'))
lblBackground = QLabel(mainRoot)
pic = QPixmap('image\pic-1.jpg')
lblBackground.setPixmap(pic)
mainRoot.setGeometry(600, 300, 322, 220)
user = QLabel('user name', mainRoot)
user.move(50, 50)
password = QLabel('password', mainRoot)
password.move(50, 80)
username_edt = QLineEdit(mainRoot)
username_edt.move(110, 50)
password_edt = QLineEdit(mainRoot)
password_edt.setEchoMode(QLineEdit.Password)
password_edt.move(110, 75)
signin = QPushButton('sign in', mainRoot)
signin.move(20, 110)
registerBtn = QPushButton('register ', mainRoot)
registerBtn.move(120, 110)
qut_btn = QPushButton('Quit', mainRoot)
qut_btn.move(220, 110)
def registerUser():
import register
registerBtn.clicked.connect(registerUser)
qut_btn.clicked.connect(quit)
mainRoot.show()
sys.exit(app.exec_())
这个文件显示在register.py中:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QComboBox, QRadioButton
from PyQt5.QtGui import QPixmap
app = QApplication(sys.argv)
signRoot = QWidget()
signRoot.setWindowTitle('Registration')
lblBackground = QLabel(signRoot)
pix = QPixmap('image\pic-10.jpg')
lblBackground.setPixmap(pix)
signRoot.setGeometry(600, 300, 400, 300)
fullNameLbl = QLabel('Full Name', signRoot)
fullNameLbl.move(100, 50)
userNameLbl = QLabel('User Name', signRoot)
userNameLbl.move(100, 80)
passWord = QLabel('password', signRoot)
passWord.move(100, 110)
typeLbl = QLabel('Type', signRoot)
typeLbl.move(100, 140)
departmentLbl = QLabel('Department', signRoot)
departmentLbl.move(100, 180)
fullName = QLineEdit(signRoot)
fullName.move(200, 50)
userName = QLineEdit(signRoot)
userName.move(200, 80)
passWord = QLineEdit(signRoot)
passWord.setEchoMode(QLineEdit.Password)
passWord.move(200, 110)
maleType = QRadioButton('Male', signRoot)
maleType.move(200, 140)
femaleType = QRadioButton('Female', signRoot)
femaleType.move(270, 140)
department = QComboBox(signRoot)
department.move(200, 180)
submitted = QPushButton('Submit', signRoot)
submitted.move(150, 240)
qut_btn = QPushButton('Quit', signRoot)
qut_btn.move(250, 240)
def qutRegisterForm():
signRoot.close()
qut_btn.clicked.connect(qutRegisterForm)
signRoot.show()
运行菜单后出现然后点击文件并注册
注册表单出现后,单击退出按钮关闭它
当我重复点击文件并注册时,无法再次打开注册表单
试试吧:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class window(QDialog):
def __init__(self):
super().__init__()
self.initWin()
def initWin(self):
self.gridLayoutCreation()
vBoxLayout = QVBoxLayout()
vBoxLayout.addWidget(self.groupBox)
self.setLayout(vBoxLayout)
# --- self.show()
def gridLayoutCreation(self):
self.groupBox = QGroupBox('')
gridLayout = QGridLayout()
qutBtn = QPushButton('Exit')
gridLayout.addWidget(qutBtn, 0, 0)
qutBtn.clicked.connect(self.qut)
self.groupBox.setLayout(gridLayout)
def qut(self):
self.close()
class MainWindow(QMainWindow):
count = 0
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
file.addAction("cascade")
file.addAction("Tiled")
file.triggered[QAction].connect(self.openRegister)
def openRegister(self, q):
print("triggered-> q ->", q.text())
if q.text() == "New":
MainWindow.count = MainWindow.count+1
sub = QMdiSubWindow()
sub.setAttribute(Qt.WA_DeleteOnClose)
sub.setWidget(window()) # <---
sub.setWindowTitle("subwindow"+str(MainWindow.count))
sub.setGeometry(100, 100, 400, 400)
self.mdi.addSubWindow(sub)
sub.show()
if q.text() == "cascade":
self.mdi.cascadeSubWindows()
if q.text() == "Tiled":
self.mdi.tileSubWindows()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = MainWindow()
ex.setWindowTitle("Menu")
ex.show()
sys.exit(app.exec_())
更新
卖弄.朋友
import sys
from PyQt5.QtWidgets import QMainWindow, QMdiArea, QAction, QApplication
from register import window # +++
class MainWindow(QMainWindow):
count = 0
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")
open_action = QAction('Open', self) # +++
file.addAction(open_action) # +++
file.triggered[QAction].connect(self.openRegister)
self.setWindowTitle("Menu")
def openRegister(self):
# from register import window
self.win = window(self.mdi) # +++
def main():
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
register.朋友
from PyQt5.QtWidgets import QPushButton, QGridLayout, QDialog,QGroupBox, QVBoxLayout, QApplication
class window(QDialog):
# def __init__(self):
# super().__init__()
def __init__(self, parent=None):
super(window, self).__init__(parent)
self.title = 'register'
self.initWin()
def initWin(self):
self.setWindowTitle(self.title)
self.gridLayoutCreation()
vBoxLayout = QVBoxLayout()
vBoxLayout.addWidget(self.groupBox)
self.setLayout(vBoxLayout)
self.show()
def gridLayoutCreation(self):
self.groupBox = QGroupBox('')
gridLayout = QGridLayout()
qutBtn = QPushButton('Exit')
gridLayout.addWidget(qutBtn, 0, 0)
qutBtn.clicked.connect(self.qut)
self.groupBox.setLayout(gridLayout)
def qut(self):
self.close()
# win = window()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = window()
ex.setWindowTitle("Menu")
ex.show()
sys.exit(app.exec_())
更新2
卖弄.朋友
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton
from PyQt5.QtGui import QPixmap, QIcon
app = QApplication(sys.argv)
mainRoot = QWidget()
mainRoot.setWindowTitle('Login')
mainRoot.setWindowIcon(QIcon('im.png'))
lblBackground = QLabel(mainRoot)
pic = QPixmap('Ok.png')
lblBackground.setPixmap(pic)
mainRoot.setGeometry(600, 300, 322, 220)
user = QLabel('user name', mainRoot)
user.move(50, 50)
password = QLabel('password', mainRoot)
password.move(50, 80)
username_edt = QLineEdit(mainRoot)
username_edt.move(110, 50)
password_edt = QLineEdit(mainRoot)
password_edt.setEchoMode(QLineEdit.Password)
password_edt.move(110, 75)
signin = QPushButton('sign in', mainRoot)
signin.move(20, 110)
registerBtn = QPushButton('register ', mainRoot)
registerBtn.move(120, 110)
qut_btn = QPushButton('Quit', mainRoot)
qut_btn.move(220, 110)
def registerUser():
# import register
from register import registerForm
form = registerForm()
form.show()
registerBtn.clicked.connect(registerUser)
qut_btn.clicked.connect(quit)
mainRoot.show()
sys.exit(app.exec_())
register.朋友
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QComboBox, QRadioButton
from PyQt5.QtGui import QPixmap
app = QApplication(sys.argv)
def registerForm(): # <=======
signRoot = QWidget()
signRoot.setWindowTitle('Registration')
lblBackground = QLabel(signRoot)
pix = QPixmap('image\pic-10.jpg')
lblBackground.setPixmap(pix)
signRoot.setGeometry(600, 300, 400, 300)
fullNameLbl = QLabel('Full Name', signRoot)
fullNameLbl.move(100, 50)
userNameLbl = QLabel('User Name', signRoot)
userNameLbl.move(100, 80)
passWord = QLabel('password', signRoot)
passWord.move(100, 110)
typeLbl = QLabel('Type', signRoot)
typeLbl.move(100, 140)
departmentLbl = QLabel('Department', signRoot)
departmentLbl.move(100, 180)
fullName = QLineEdit(signRoot)
fullName.move(200, 50)
userName = QLineEdit(signRoot)
userName.move(200, 80)
passWord = QLineEdit(signRoot)
passWord.setEchoMode(QLineEdit.Password)
passWord.move(200, 110)
maleType = QRadioButton('Male', signRoot)
maleType.move(200, 140)
femaleType = QRadioButton('Female', signRoot)
femaleType.move(270, 140)
department = QComboBox(signRoot)
department.move(200, 180)
submitted = QPushButton('Submit', signRoot)
submitted.move(150, 240)
qut_btn = QPushButton('Quit', signRoot)
qut_btn.move(250, 240)
def qutRegisterForm():
signRoot.close()
qut_btn.clicked.connect(qutRegisterForm)
# signRoot.show()
return signRoot # <=======