PyQt5一日速成(一)

emmm, 前段時間上課有個小作業,需要製作一個界面用來搭載深度學習模型,由於是python寫的tensorflow,所以就用python做個簡單的GUI。
這裏推薦PyQt5進行界面編寫。
關於PyQt的一些坑:
1,由於只是製作一些簡單的界面,所以並不推薦使用Qtdesigner以及Qt。原因:首先安裝複雜,其次pycharm收費。留學黨用個盜版會被查,所以就不冒這個風險了。
2,關於C++,java等界面轉python界面,雖然有各種不同種類的類似MFC的拖拽流界面編輯,但轉python總會出問題,而對於沒有學習過pyqt5或者python GUI的人來說,自己寫比調BUG更簡單。
3,關於pyqt5封裝成.exe文件,如果用的是沙箱例如anaconda之類云云,或者不用沙箱,直接下載安裝一個python3的IDLE,windows電腦點圖標就能直接運行文件,比封裝方便多了,而且更便於演示。mac的話就算封裝了也打不開。

下面進入正題:

  1. PyQt5 安裝
    很簡單,直接pip3 install pyqt5
    如果對版本有要求的話:
    pip3 install pyqt5==5.8 等等。
    安裝成功的話,import PyQt5 不報錯,注意大小寫。

  2. 個人推薦sublime,第一個界面程序。
    pyqt5 主窗口,直接copy就行了。

// 主界面
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#* from PyQt5.QtGui import QIcon
class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.setWindowModality(QtCore.Qt.WindowModal)
        mainWindow.resize(100100)#可拖拽,界面大小
        # mainWindow.setFixedSize(100,100)#不可拖拽,界面大小
        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)
    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "主界面標題"))
        #* mainWindow.setWindowIcon(QIcon('圖片.png'))
	#* 在主界面標題前面插入圖片,需要圖片和程序在同一路徑。
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

以後所有的操作都是在這個界面上進行添加的,由於沒有什麼圖片,就不弄icon了。
如果需要添加icon,加上帶有*的代碼就行,在此不做贅述。

  1. 添加按鈕
    這段代碼,需要多少個按鈕,複製粘貼幾次就行,注意修改按鈕前綴標註。
self.pushButton = QtWidgets.QPushButton(self.centralWidget)
self.pushButton.setGeometry(QtCore.QRect(10, 10, 10, 60))
#座標爲 按鈕的(X,Y)座標以及(A,B)按鈕寬度和高度。
self.pushButton.setObjectName("界面按鈕顯示文字")
self.pushButton.setText("按鈕")
// 按鈕
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#* from PyQt5.QtGui import QIcon
class Ui_mainWindow(object):
    def Ui(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.setWindowModality(QtCore.Qt.WindowModal)
        mainWindow.resize(200,200)

        self.centralWidget = QtWidgets.QWidget(mainWindow)
        self.centralWidget.setObjectName("centralWidget")

        self.pushButton1 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton1.setGeometry(QtCore.QRect(10, 10, 100, 60))
        self.pushButton1.setObjectName("button1")
        self.pushButton1.setText("按鈕1")

        self.pushButton2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton2.setGeometry(QtCore.QRect(10, 100, 100, 60))
        self.pushButton2.setObjectName("button1")
        self.pushButton2.setText("按鈕2")

        mainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)
    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "主界面標題"))
        #* mainWindow.setWindowIcon(QIcon('圖片.png'))
        #* 在主界面標題前面插入圖片,需要圖片和程序在同一路徑。
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.Ui(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

在這裏插入圖片描述

一點可能會用到的功能:
1,self.pushButton.setFlat(True) 算是一個按鈕事件,但是內嵌了代碼,直接調用就好,這行代碼是說當某個按鈕被按住時,Ture表示被按住。如果設置了其他按鈕設置,會在按鈕被按下時直接顯示,一般情況不顯示。
2,按鈕中文本的字體改變等等依次是,字體格式,加粗,大小,顏色,下劃線。
3,修改按鈕底色背景色等等
4,按鈕前加入icon,類似於主窗口的icon


        font = QtGui.QFont()
        font.setFamily('微軟雅黑')
        font.setBold(True)
        font.setPointSize(13)
        font.setWeight(75)
        self.pushButton1.setFont(font)

        self.pushButton1.setFlat(True)
        self.pushButton1.setStyleSheet("background-color: rgb(164, 185, 255);"
        "border-color: rgb(170, 150, 163);"
        "font: 75 12pt \"Arial Narrow\";"
        "color: rgb(126, 255, 46);")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton1.setIcon(icon)
        self.pushButton1.setIconSize(QtCore.QSize(10, 10))
        self.pushButton1.setAutoRepeatDelay(50)
  1. 添加label
    label翻譯爲標籤,不是特別準確,他不是一個窗口最上方的那一條控件。而是窗口中的文本或者圖片視頻,都可以用label來進行添加。但一般使用是添加文字標註,圖片一般會使用graphicsView,接下來會講。

首先定義一個標籤


        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(10, 0, 100, 60))
        self.label.setText("標籤顯示文字")
        self.label.setObjectName("label")

結合第三節中的按鈕,我們給兩個按鈕上放加上lable的文字說明:

//標籤
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_mainWindow(object):
    def Ui(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.setWindowModality(QtCore.Qt.WindowModal)
        mainWindow.resize(200,200)

        self.centralWidget = QtWidgets.QWidget(mainWindow)
        self.centralWidget.setObjectName("centralWidget")

        self.pushButton1 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton1.setGeometry(QtCore.QRect(10, 30, 100,60))
        self.pushButton1.setObjectName("button1")
        self.pushButton1.setText("按鈕1")

        self.label1 = QtWidgets.QLabel(self.centralWidget)
        self.label1.setGeometry(QtCore.QRect(30, 0, 100, 60))
        self.label1.setText("這是按鈕1")
        self.label1.setObjectName("label1")


        self.pushButton2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton2.setGeometry(QtCore.QRect(10, 120, 100, 60))
        self.pushButton2.setObjectName("button1")
        self.pushButton2.setText("按鈕2")

        self.label2 = QtWidgets.QLabel(self.centralWidget)
        self.label2.setGeometry(QtCore.QRect(30, 90, 100, 60))
        self.label2.setText("這是按鈕2")
        self.label2.setObjectName("label2")

        mainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)
    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "主界面標題"))
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.Ui(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_()) 

在這裏插入圖片描述

  1. 添加一個圖片打開窗口。
    graphicsView是一個圖片打開窗口,設置了窗口大小之後,打開的圖片大小隻能被放置在這個窗口中。
self.graphicsView1 = QtWidgets.QGraphicsView(self.centralWidget)
        self.graphicsView.setGeometry(QtCore.QRect(10, 90, 100, 100))
        self.graphicsView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView.setObjectName("graphicsView")

第三節和第四節一起

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_mainWindow(object):
    def Ui(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.setWindowModality(QtCore.Qt.WindowModal)
        mainWindow.resize(200,200)

        self.centralWidget = QtWidgets.QWidget(mainWindow)
        self.centralWidget.setObjectName("centralWidget")

        self.pushButton1 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton1.setGeometry(QtCore.QRect(10, 30, 100,60))
        self.pushButton1.setObjectName("button1")
        self.pushButton1.setText("按鈕1")

        self.label1 = QtWidgets.QLabel(self.centralWidget)
        self.label1.setGeometry(QtCore.QRect(30, 0, 100, 60))
        self.label1.setText("這是按鈕1")
        self.label1.setObjectName("label1")

        self.graphicsView1 = QtWidgets.QGraphicsView(self.centralWidget)
        self.graphicsView1.setGeometry(QtCore.QRect(10, 90, 100, 100))
        self.graphicsView1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView1.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView1.setObjectName("graphicsView")

        mainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)
    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "主界面標題"))
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()

在這裏插入圖片描述

我們將在下一節講解按鈕的觸發事件。
使用按鈕1打開圖片文件並顯示在圖片顯示欄中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章