PyQt5一日速成(一)

时间:2024-04-05 17:14:50

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_())

PyQt5一日速成(一)

一点可能会用到的功能:
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_()) 

PyQt5一日速成(一)

  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()

PyQt5一日速成(一)

我们将在下一节讲解按钮的触发事件。
使用按钮1打开图片文件并显示在图片显示栏中。