完美解決PyQt5登錄界面跳轉主界面方法

一、將兩個類寫入到一個Python文件夾中

使用Qtdesigner設計ui界面,實行界面分離,分別設計兩個界面,一個是登錄的界面,一個是主界面

然後新建一個Python文件,在文件中分別將這兩個界面UI引入,分別創建兩個類,一個是實現登錄顯示的類,另一個是實現主界面顯示的類。 

 創建兩個類,主窗口類

 登錄窗口類

 最後使用一個main函數,在這個函數中實例化登錄窗口類,顯示登錄窗口

然後在登錄窗口中實例化主窗口類,使用主窗口類.show()方法進行顯示主窗口,並且關閉原來的登錄窗口

二、將兩個類分別寫在兩個Python文件夾中

創建兩個不同的或者相同的窗口類,然後在登錄窗口中的main函數中或者在其他位置聲明主界面類,然後調用主界面的show()方法就可以顯示了

1、在main函數中聲明主窗口類

Login.py(登錄窗口)文件

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QDockWidget, QListWidget
from PyQt5.QtGui import *

from Ui_Login import Ui_Login_Window  #由.UI文件生成.py文件後,導入創建的GUI類

from Main import * # Main.py爲 主窗口代碼文件

from class_MSSQL import MSSQL

#QtWidgets.QMainWindow:繼承該類方法
class Login_window(QtWidgets.QMainWindow,Ui_Login_Window):  
 
    #__init__: 析構函數,也就是類被創建後就會預先加載的項目。
    # 馬上運行,這個方法可以用來對你的對象做一些你希望的初始化。
    def __init__(self):  
        #這裏需要重載一下Login_window,同時也包含了QtWidgets.QMainWindow的預加載項。
        super(Login_window, self).__init__()  
        self.setupUi(self)

        # 將點擊事件與槽函數進行連接
        self.btn_login.clicked.connect(self.btn_login_fuc) 

    #登錄按鈕 函數
    def btn_login_fuc(self):
        #1 獲取輸入的賬戶和密碼
        account = self.txt_1.text()  # 記得text要打括號()!
        password = self.txt_2.text()
        if account == "" or password == "":
            reply = QMessageBox.warning(self,"警告","賬號密碼不能爲空,請輸入!")
            return

        #2 查詢數據庫,判定是否有匹配
        ms = MSSQL()
        result = ms.Login_result(account, password)
        if(len(result) > 0):
          #1打開新窗口
          Ui_Main.show() 
         #2關閉本窗口
          self.close()              
        else:
            reply = QMessageBox.warning(self,"警告","賬戶或密碼錯誤,請重新輸入!")

if __name__ == '__main__': #如果這個文件是主程序。
    app = QtWidgets.QApplication(sys.argv) #QApplication相當於main函數,也就是整個程序(很多文件)的主入口函數。對於GUI程序必須至少有一個這樣的實例來讓程序運行。
    window = Login_window() #生成一個實例(對象)
    Ui_Main = Ui_Main() #生成主窗口的實例
    window.show() #有了實例,就得讓它顯示。這裏的show()是QWidget的方法,用來顯示窗口。
    sys.exit(app.exec_()) # 調用sys庫的exit退出方法,條件是app.exec_()也就是整個窗口關閉。

2、或者直接在class類的方法中聲明主窗口類,然後調用show()方法

      前邊代碼與上同
        ms = MSSQL()
        result = ms.Login_result(account, password)
        if(len(result) > 0):
          Ui_Main = Ui_Main() #生成主窗口的實例         
           #1打開新窗口  
         Ui_Main.show() 
          #2關閉本窗口
           self.close() 
        else:
            reply = QMessageBox.warning(self,"警告","賬戶或密碼錯誤,請重新輸入!")

if __name__ == '__main__': #如果這個文件是主程序。
    app = QtWidgets.QApplication(sys.argv) #QApplication相當於main函數,也就是整個程序(很多文件)的主入口函數。對於GUI程序必須至少有一個這樣的實例來讓程序運行。
    window = Login_window() #生成一個實例(對象)
    window.show() #有了實例,就得讓它顯示。這裏的show()是QWidget的方法,用來顯示窗口。
    sys.exit(app.exec_()) # 調用sys庫的exit退出方法,條件是app.exec_()也就是整個窗口關閉。

Main.py(主窗口)文件

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

from Ui_Main import Ui_MainWindow  #由.UI文件生成.py文件後,導入創建的GUI類

import math
from PIL import Image, ImageDraw, ImageFont  
import numpy as np
import os
import cv2 as cvcv
from class_Detection import Detection

class Ui_Main(QtWidgets.QMainWindow,Ui_MainWindow):  
 
    def __init__(self): 
        super(Ui_Main, self).__init__()  
        self.setupUi(self)

        # 將點擊事件與槽函數進行連接
        self.btn_video.clicked.connect(self.btn_video_fuc)

    def btn_video_fuc(self):
        filename = QFileDialog.getOpenFileName(self,'open file','./')

        self.timer_camera = QTimer(self)

        self.cap = cvcv.cv2.VideoCapture(filename[0])

        self.timer_camera.timeout.connect(self.show_pic)
        self.timer_camera.start(10) #1毫秒

    def show_pic(self):
        dc = Detection()
        success,frame = self.cap.read()        

        if success:
            show = dc.process_image(frame)
            showImage = QImage(show.data, show.shape[1], show.shape[0],QImage.Format_RGB888)
            self.label.setPixmap(QPixmap.fromImage(showImage)) 
            self.label.setScaledContents(True)  #圖片自適應
            self.timer_camera.start(10)

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    window = Ui_Main()
    window.show() 
    sys.exit(app.exec_()) # 這裏省略sys.exit(),直接使用app.exec()也是可以的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章