导入登记表作为程序清单中的选择,完成后关闭表格;当我再次回到开放表格时,在同一会话中没有回复[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我想打开一个在注册文件中表示的表单,该表单通过登录窗口(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()

运行菜单后出现然后点击文件并注册

注册表单出现后,单击退出按钮关闭它

当我重复点击文件并注册时,无法再次打开注册表单

python pyqt
1个回答
0
投票

试试吧:

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

enter image description here


更新

卖弄.朋友

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

enter image description here


更新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                                           # <=======

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.