繁体   English   中英

我有两个文件 LOGIN.py 和 LOGINCLICK.py。 如何通过单击按钮从 LOGINCLICK.py 打开 LOGIN.py 文件?

[英]I have two files LOGIN.py and LOGINCLICK.py. How to open LOGIN.py file from LOGINCLICK.py by clicking a button?

登录.py

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_LOGIN_PAGE(object):
    def setupUi(self, LOGIN_PAGE):
        LOGIN_PAGE.setObjectName("LOGIN_PAGE")
        LOGIN_PAGE.resize(1909, 995)
        self.centralwidget = QtWidgets.QWidget(LOGIN_PAGE)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(690, 220, 501, 571))
        font = QtGui.QFont()
        font.setFamily("Cambria Math")
        font.setPointSize(11)
        self.frame.setFont(font)
        self.frame.setStyleSheet("QFrame{\n""background:rgb(255, 250, 175);\n""border-radius:30px;\n"
        "}\n""\n""QLineEdit{\n""border-radius:10px;\n""}\n""\n""QPushButton{\n""background:#03a9f4;\n"
        "border-radius:10px;}")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.pushButton = QtWidgets.QPushButton(self.frame)
        self.pushButton.setGeometry(QtCore.QRect(30, 360, 441, 81))
        font = QtGui.QFont()
        font.setFamily("Cambria")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.frame)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 480, 241, 41))
        font = QtGui.QFont()
        font.setFamily("Gill Sans MT")
        font.setPointSize(10)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.lineEdit = QtWidgets.QLineEdit(self.frame)
        self.lineEdit.setGeometry(QtCore.QRect(30, 260, 441, 51))
        font = QtGui.QFont()
        font.setFamily("Cambria Math")
        font.setPointSize(12)
        self.lineEdit.setFont(font)
        self.lineEdit.setText("")
        self.lineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.frame)
        self.lineEdit_2.setGeometry(QtCore.QRect(30, 110, 441, 51))
        font = QtGui.QFont()
        font.setFamily("Cambria Math")
        font.setPointSize(12)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(40, 60, 231, 41))
        font = QtGui.QFont()
        font.setFamily("Cambria Math")
        font.setPointSize(11)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.frame)
        self.label_2.setGeometry(QtCore.QRect(40, 210, 231, 41))
        font = QtGui.QFont()
        font.setFamily("Cambria Math")
        font.setPointSize(11)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        LOGIN_PAGE.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(LOGIN_PAGE)
        self.statusbar.setObjectName("statusbar")
        LOGIN_PAGE.setStatusBar(self.statusbar)

        self.retranslateUi(LOGIN_PAGE)
        QtCore.QMetaObject.connectSlotsByName(LOGIN_PAGE)

    def retranslateUi(self, LOGIN_PAGE):
        _translate = QtCore.QCoreApplication.translate
        LOGIN_PAGE.setWindowTitle(_translate("LOGIN_PAGE", "MainWindow"))
        self.pushButton.setText(_translate("LOGIN_PAGE", "LOGIN"))
        self.pushButton_2.setText(_translate("LOGIN_PAGE", "Forget Password"))
        self.lineEdit.setPlaceholderText(_translate("LOGIN_PAGE", "PASSWORD"))
        self.lineEdit_2.setPlaceholderText(_translate("LOGIN_PAGE", "USERNAME"))
        self.label.setText(_translate("LOGIN_PAGE", "USERNAME :"))
        self.label_2.setText(_translate("LOGIN_PAGE", "PASSWORD :"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    LOGIN_PAGE = QtWidgets.QMainWindow()
    ui = Ui_LOGIN_PAGE()
    ui.setupUi(LOGIN_PAGE)
    LOGIN_PAGE.show()
    sys.exit(app.exec_())

登录点击.py

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(505, 256)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(-1, -1, 501, 251))
        self.frame.setStyleSheet("QFrame{\n""background:rgb(248, 255, 185);}\n""\n""QPushButton{\n"
        "background:#03a9f4;\n""border-radius:10px;}")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.pushButton1 = QtWidgets.QPushButton(self.frame)
        self.pushButton1.setGeometry(QtCore.QRect(70, 90, 151, 51))
        self.pushButton1.setObjectName("pushButton1")
        self.pushButton1_2 = QtWidgets.QPushButton(self.frame)
        self.pushButton1_2.setGeometry(QtCore.QRect(280, 90, 151, 51))
        self.pushButton1_2.setObjectName("pushButton1_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton1.setText(_translate("MainWindow", "LOGIN"))
        self.pushButton1_2.setText(_translate("MainWindow", "REGISTRATION"))
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

如何通过单击按钮从 LOGINCLICK.py 切换到 LOGIN.py?

首先,这更像是一个概念问题,您不会在这些文件之间“切换”,而是在这些文件中的类实例之间“切换”。

其次,您应该创建一个文件作为“主”脚本,这是您实际从 python 运行的文件; 这是使用多个文件作为“模块”的程序的一般规则,并且在使用 pyuic 生成的文件时对于pyuic几乎是强制性的; 请注意,您也不应该修改这些文件的内容,而是将它们导入为 python 模块(阅读有关使用 Designer的更多信息)。

使用 pyuic 重新创建文件,然后创建一个如下所示的新文件:

from PyQt5 import QtWidgets
from LOGINCLICK import Ui_MainWindow
from LOGIN import Ui_LOGIN_PAGE

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton1.clicked.connect(self.showLogin)

    def showLogin(self):
        self.loginWindow = LoginWindow()
        self.loginWindow.show()


class LoginWindow(QtWidgets.QMainWindow, Ui_LOGIN_PAGE):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

现在,一些建议:

  • 在任何情况下都要避免固定的几何形状,并使用布局管理器(如 QGridLayout、QHBoxLayout 或 QVBoxLayout),这样 windows 的内容将始终调整到可用大小,否则如果用户将 window 的大小调整为尺寸比您决定的要小(还有其他原因,但这是最重要的);
  • 不要对文件或变量使用大写名称; Python 代码的样式指南中阅读有关命名约定的更多信息;
  • 登录 window 可能应该是“模态的”(显示在当前 windows 上并避免与它们交互,直到登录 window 关闭); 您可以为此使用 QDialog:从 Designer 创建一个新的空对话框,复制当前登录表单的元素并将它们粘贴到新对话框(或 select 所有这些并使用 ctrl+drag),保存并生成文件pyuic,然后考虑以下修改来更改上面的代码:
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    #...

    def showLogin(self):
        self.loginWindow = LoginWindow(self)
        self.loginWindow.exec_()

class LoginWindow(QtWidgets.QDialog, Ui_LOGIN_PAGE):
    def __init__(self, parent=None):
        super().__init__()
        self.setupUi(self)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM