簡體   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