4.1制作登錄界面
首先打開Qt-Designer,選擇Widget,它和Main Window的區(qū)別在于:Main Window有工具欄菜單欄狀態(tài)欄等,而Widget就適合做個簡單的登錄界面。如下圖:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-818110.html
首先如下列圖,在這里可以設(shè)置標題為登錄,然后插入一個logo圖片,也可以給字體標題設(shè)置大小樣式等。
接下來輸入框都是用Line Edit,登錄按鈕是Push Button。設(shè)置登錄界面大小固定,禁止隨意縮放,將其最大窗口和最小窗口都設(shè)為長380,寬300。
密碼設(shè)置為password形式,其密碼設(shè)置為1234,點擊登錄按鈕可以進入主界面。
4.2制作主界面
接下來再新建,選擇Main Window,Main Window有工具欄菜單欄狀態(tài)欄等,適合做主界面。如下圖:
?文章來源:http://www.zghlxwxcb.cn/news/detail-818110.html
其中點擊繪圖按鈕,可以出圖,點擊取消則返回上一頁(登錄頁),如下代碼部分是對中間繪圖區(qū)域的樣式設(shè)置:
self.label_3.setObjectName("label_3")
self.label_3.setFrameShape(QtWidgets.QFrame.Box)
# 設(shè)置陰影 據(jù)說只有加了這步才能設(shè)置邊框顏色。///可選樣式有Raised、Sunken、Plain(這個無法設(shè)置顏色)等
self.label_3.setFrameShadow(QtWidgets.QFrame.Raised)
# 設(shè)置背景顏色,包括邊框顏色
# self.label.setStyleSheet()
self.label_3.setFrameShape(QFrame.Box)
# 設(shè)置邊框樣式
# 設(shè)置背景填充顏色'background-color: rgb(0, 0, 0)'
# 設(shè)置邊框顏色border-color: rgb(255, 170, 0);
self.label_3.setStyleSheet( 'border-width: 1px;border-style: solid;border-color: rgb(255, 170, 0);background-color: rgb(100, 149, 237);')
4.3 pyqt界面代碼實現(xiàn)
界面開發(fā)完成后,將.ui文件轉(zhuǎn)換為.py文件。將login.ui和main.ui轉(zhuǎn)換成login.py文件和main.py。放置好控件之后,保存會是以ui文件的形式。這時候需要使用PyUIC工具來將其轉(zhuǎn)化為Py文件才能在Pycharm中打開。打開轉(zhuǎn)化完成的Python文件,可以看到整個界面是以一個類的形式編寫的,這時候是不能直接運行的。因為現(xiàn)在只是一個類,我們需要將其進行實例化。
如何顯示我們創(chuàng)建好的GUi程序,我們需要QtWidgets.QMainWindow()中的show()函數(shù)來顯示界面。這里一般有三種寫法。
第一種是直接實例化一個QtWidgets.QMainWindow()類,然后使用show()函數(shù)。
第二種是創(chuàng)建一個新的類,同時繼承QtWidgets.QMainWindow()和UI_MainWindow()兩個類,這樣這個新的類就會同時擁有兩個類的方法。
第三種是讓UI_MainWindow()繼承QtWidgets.QMainWindow(),并且i重寫其中的def?init()方法。
本設(shè)計設(shè)計界面與業(yè)務(wù)邏輯分離實現(xiàn)。
這一步主要實現(xiàn)業(yè)務(wù)邏輯,也就是點擊登錄和退出按鈕后程序要執(zhí)行的操作。為了后續(xù)維護方便,采用界面與業(yè)務(wù)邏輯相分離來實現(xiàn)。也就是通過創(chuàng)建主程序調(diào)用界面文件方式實現(xiàn)。這有2個好處。第1就是實現(xiàn)邏輯清晰。第2就是后續(xù)如果界面或者邏輯需要變更,好維護。新建index.py文件程序,調(diào)用login.py文件和main.py。index.py文件代碼如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
# 導(dǎo)入login.py、main.py里面全部內(nèi)容
import login
import main
from PyQt5.QtCore import Qt
class Win_Login:
????def __init__(self):
????????self.ui = QUiLoader().load(login.ui)
class main(main.Ui_MainWindow, QMainWindow):
????def __init__(self):
????????super(main, self).__init__()
????????self.setupUi(self) ?# 初始化
????????self.pushButton_1.clicked.connect(self.display)
????def display(self):
????????self.label_3.resize(400, 300) ?# 重設(shè)Label大小
????????self.label_3.setScaledContents(True) ?# 設(shè)置圖片自適應(yīng)窗口大小
????????self.label_3.setPixmap(QtGui.QPixmap("CO2.png"))
??class login(login.Ui_Form, QMainWindow):
????def __init__(self):
????????super(login, self).__init__()
????????self.setupUi(self)
if __name__ == '__main__':
????QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) ?# 支持高分屏自動縮放
????app = QApplication(sys.argv)
????# 為main_window類和login_window類創(chuàng)建對象
????main_window = main()
????login_window = login()
????# 顯示登陸窗口
????login_window.show()
????# 將顯示main_window與單擊登錄頁面按鈕綁定
????login_window.btn_login.clicked.connect(main_window.show)
????main_window.pushButton_2.clicked.connect(main_window.close)
????# 關(guān)閉程序,釋放資源
????sys.exit(app.exec_())
問題補充:
(1)但是此時又遇到問題,設(shè)計的界面大小和pycharm運行后的顯示窗口大小不一致,見下圖,查了資料發(fā)現(xiàn)是分辨率問題,所以需要在顯示窗口函數(shù)加一句話:
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
#支持高分屏自動縮放。
?
(2)這里調(diào)用爆紅了,為什么呢?是因為它沒把這個目錄當成模塊的目錄,可以設(shè)置將此目錄生成源代碼目錄。
?
4.4 最終實現(xiàn)的功能界面樣式
?
?
到了這里,關(guān)于pyQt界面制作(登錄+跳轉(zhuǎn)頁面)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!