首页 > 其他分享 >PyQt5

PyQt5

时间:2023-12-23 22:38:29浏览次数:21  
标签:horizontalLayout self QtWidgets PyQt5 MainWindow btn check

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5==5.15.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5-tools==5.15.0.1.7

这里最好指定一下相同版本,如果使用默认版本可能会导致安装了不同的版本使用的时候可能会有一些奇怪的错误

生成ui文件

使用evetyThing搜索designer.exe, 使用 Qt/bin 中的designer.exe程序,通过拖拽生成*.ui文件, 使用 python路径/Tools/scripts/pyuic5.exe 生成 ui文件的py形式 命令:

pyuic5.exe main_window.ui -o main_window.py

然后拷贝main_window.py文件到项目中。

运行

有了main_window.py不行还是需要QMainWindow,我们可以使用如下代码,把我们生成的ui文件绑定到QMainWindow


class MainWindow(QMainWindow, Ui_MainWindow):
    
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
		#绑定ui文件到QMainWindow
        self.setupUi(self)
		# 绑定按钮的点击信号
        self.text_check_btn.clicked.connect(self.text_check)
        self.face_check_btn.clicked.connect(self.face_check)
        self.modify_check_btn.clicked.connect(self.modify_check)


if __name__ == '__main__':
	#这里开启了主循环
    app = QApplication(sys.argv)
    main_Window = MainWindow()
    main_Window.show()
    sys.exit(app.exec_())

自定义信号槽

自定义信号槽需要导入这个包 from PyQt5.QtCore import pyqtSignal


class TextCheckThread(QThread):
    customSignal = pyqtSignal(str)

    def __init__(self, t, parent=None):
        super(TextCheckThread, self).__init__(parent)
        self.t = t

    def run(self):
        for i in range(self.t):
            time.sleep(1)
            self.customSignal.emit(str(i))

这里的线程对象定义了一个自定义的信号槽,参数是QString类型,在线程启动时,每秒发射一次这个信号。

    def fun_print(self, sss):
        print("来自线程参数 ", sss)

    self.thread.customSignal.connect(self.fun_print)

这里我们通过信号槽的connect()方法绑定了信号槽要执行的的函数,可以参考一下前面按钮的点击事件的处理。

附录一个demo源代码:

import sys
import time

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QThread, pyqtSignal


class TextCheckThread(QThread):
    customSignal = pyqtSignal(str)

    def __init__(self, t, parent=None):
        super(TextCheckThread, self).__init__(parent)
        self.t = t

    def run(self):
        for i in range(self.t):
            time.sleep(1)
            self.customSignal.emit(str(i))


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.text_check_btn = QtWidgets.QPushButton(self.centralwidget)
        self.text_check_btn.setGeometry(QtCore.QRect(290, 130, 141, 71))
        self.text_check_btn.setStyleSheet("background-color: #FF9999;\n"
                                          "border-radius:20px ")
        self.text_check_btn.setObjectName("text_check_btn")
        self.face_check_btn = QtWidgets.QPushButton(self.centralwidget)
        self.face_check_btn.setGeometry(QtCore.QRect(290, 250, 141, 71))
        self.face_check_btn.setStyleSheet("background-color: #FF9999;\n"
                                          "border-radius:20px ")
        self.face_check_btn.setObjectName("face_check_btn")
        self.modify_check_btn = QtWidgets.QPushButton(self.centralwidget)
        self.modify_check_btn.setGeometry(QtCore.QRect(290, 370, 141, 71))
        self.modify_check_btn.setStyleSheet("background-color: #FF9999;\n"
                                            "border-radius:20px ")
        self.modify_check_btn.setObjectName("modify_check_btn")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(50, 30, 671, 61))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.file_path_et = QtWidgets.QLineEdit(self.layoutWidget)
        self.file_path_et.setObjectName("file_path_et")
        self.horizontalLayout.addWidget(self.file_path_et)
        self.layoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget_2.setGeometry(QtCore.QRect(460, 260, 261, 51))
        self.layoutWidget_2.setObjectName("layoutWidget_2")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget_2)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.label_3 = QtWidgets.QLabel(self.layoutWidget_2)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_3.addWidget(self.label_3)
        self.face_result = QtWidgets.QLineEdit(self.layoutWidget_2)
        self.face_result.setObjectName("face_result")
        self.horizontalLayout_3.addWidget(self.face_result)
        self.layoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget_3.setGeometry(QtCore.QRect(460, 380, 261, 51))
        self.layoutWidget_3.setObjectName("layoutWidget_3")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.layoutWidget_3)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label_4 = QtWidgets.QLabel(self.layoutWidget_3)
        self.label_4.setObjectName("label_4")
        self.horizontalLayout_4.addWidget(self.label_4)
        self.modify_result = QtWidgets.QLineEdit(self.layoutWidget_3)
        self.modify_result.setObjectName("modify_result")
        self.horizontalLayout_4.addWidget(self.modify_result)
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(460, 140, 261, 51))
        self.widget.setObjectName("widget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_2.addWidget(self.label_2)
        self.text_result = QtWidgets.QLineEdit(self.widget)
        self.text_result.setObjectName("text_result")
        self.horizontalLayout_2.addWidget(self.text_result)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.text_check_btn.setText(_translate("MainWindow", "文本检测"))
        self.face_check_btn.setText(_translate("MainWindow", "微表情检测"))
        self.modify_check_btn.setText(_translate("MainWindow", "恶意篡改检测"))
        self.label.setText(_translate("MainWindow", "文件路径:"))
        self.label_3.setText(_translate("MainWindow", "检测结果:"))
        self.label_4.setText(_translate("MainWindow", "检测结果:"))
        self.label_2.setText(_translate("MainWindow", "检测结果:"))


class MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.text_check_btn.clicked.connect(self.text_check)
        self.face_check_btn.clicked.connect(self.face_check)
        self.modify_check_btn.clicked.connect(self.modify_check)

    def fun_print(self, sss):
        print("来自线程参数 ", sss)

    def text_check(self):
        filePath = self.file_path_et.text()
        self.thread = TextCheckThread(t = 10)
        self.thread.customSignal.connect(self.fun_print)
        self.thread.start()
        print("文本检测", filePath)
        self.text_result.setText("检测通过")

    def face_check(self):
        filePath = self.file_path_et.text()
        print("微表情检测", filePath)
        self.face_result.setText("11111")

    def modify_check(self):
        filePath = self.file_path_et.text()
        print("恶意篡改检测", filePath)
        self.modify_result.setText(filePath)




if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_Window = MainWindow()
    main_Window.show()
    sys.exit(app.exec_())

标签:horizontalLayout,self,QtWidgets,PyQt5,MainWindow,btn,check
From: https://blog.51cto.com/u_13893439/8946238

相关文章

  • pyqt5 子窗口的创建,以及主窗口和子窗口的通信
    使用designer画好ui,注意选择dialog对话框然后将ui文件转换成py目标和源文件换成你自己的pyuic5-oqt_hgbp.pyhtbp_autotest.ui主窗口调用子窗口方法一:常规调用,importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QDialog##引入主窗口ui转py文件fr......
  • pyqt5-自定义函数优化管理组件
    1、介绍pyqt本身提供了诸多的方法和事件特性,可以操作ui组件。对于单一的项目或者说具有个人风格的开发者来说,在此基础上进行整合可以优化代码。整合,这里特指的是ui组件。可能是ui的显示和初始化,也可能是相关的业务代码。2、测试和总结函数中的ui组件可以调用设置值或获取的......
  • pyqt5-自定义类管理组件
    1、直接定义类,类对象作为XxWindowClass的属性,和self.window并列。将self.window的部分组件赋值给自定义类的属性,完成同步。经测试,此时自定义类的对象中可以读取和操作ui组件。但是无法进行事件设置,设置无效。2、解决方法目前有两个解决方法2.1继续1的做法,自定义类的对象与sel......
  • PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
    (QLabel控件是什么?方法有哪些?具体如何使用?)1QLabel控件作用?QLabel控件用于显示不可编辑的文本或图片,也用于设置超链接、富文本,以及作为其他控件的;QLabel控件是PyQt5是一个非常常用又非常基础的一个控件。2QLabel源码源码路径:PyQt5\QtWidgets\QLabel.py部分源码:cla......
  • pyqt5-designer简单使用和代码简单说明
    学习pyqt,实际上主要是逐个学习ui组件。 1、designer的简单使用(1)创建窗口主要是QWidget类窗口和QMainWindow窗口的使用。后者支持窗口菜单栏的实现。(2)拖动(3)布局和预览(4)查看组件属性(5)对象名称和类的 2、简单的代码说明(1)窗口中的所有ui组件,是作为窗口对象的......
  • PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?
    (PyQt5-如何设置应用和窗口的图标?控件的提示信息如何设置?)1如何设置应用和窗口的图标?1.1导入需要的包QApplication类是PyQt5的应用程序类;QMainWindow类是一个主窗口类;QIcon类用于创建和管理图标;ctypes是python的一个函数库,提供和C语言兼容的数据类型,可以直接调用动态链接......
  • pyqt5-QScrollBar
    1、介绍这是一个进度条组件,两侧点击可以加减。 setMinimum(self,a0:int)设置最小值,可以是负值setMaximum(self,a0:int)设置最大值,可以是超过100设置浮点数时,保留其整数部分value(self)->int返回进度条的数值,int类型。默认时最小为0,最大为99。两侧点击,加减的......
  • PyQt5-16 屏幕坐标系的了解和基本使用
    (16什么是屏幕坐标系?)1什么是屏幕坐标系?2相关概念屏幕坐标系,即窗口相对于屏幕的坐标。屏幕左上角坐标称为原点坐标(0,0);窗口的坐标,即窗口的左上角相对原来的坐标,如下图示:窗口的宽和高也有两种,一种是工作取的高度,一种菜单栏的高度,比如如下说明:3代码实现创建一个窗口,......
  • PyQt5-如何设置主窗口居中?退出应用程序如何操作?
    (15如何设置主窗口居中?退出应用程序如何操作?)1如何实现主窗口居中显示?让主窗口居中,其实就是让窗口的左右边缘到左右屏幕距离相等,让窗口的上下边缘到上下屏幕的距离相等;主要是需要进行计算和移动工作;可以使用QDesktopWidget类来获取屏幕的大小和位置信息,然后根据这些信息计......
  • pyqt5阻止和删除信号
    QObject类r的下列函数提供了阻止、删除信号处理程序的方法:blockSignals()-如果Flag为True,暂时阻止接收信号;Flag为True时,恢复接收。该函数返回前面连接的状态值;signalsBlocked()-返回信号是否被阻止;disconnect()-删除信号处理程序......