qt--python安装

安装

pip install pyqt5
pip install PyQt5-tools

界面

这里写图片描述
区域1是UI界面制作导向,QtDesigner为我们提供了一些常用模块,非常方便;
区域2是UI控件列表;
区域3是控件属性列表;
区域4是Action Editor编辑列表;
区域5信号和槽的编辑列列表;
区域6是资源处理窗口。

信号与槽

i.信号绑定槽

self.pushButton.clicked.connect(self.firtPyQt5_button_click)

ii.信号绑定多个槽

self.pushButton.clicked.connect(self.firtPyQt5_button_click)
self.pushButton.clicked.connect(self.firtPyQt5_button_click_2)

iii.信号绑定信号

self.pushButton.clicked.connect(self.firtPyQt5_button_click)
self.pushButton1.clicked.connect(self.pushButton.clicked)

iv.信号与信号,信号与槽的解绑

self.pushButton1.clicked.disconnect(self.pushButton.clicked)
self.pushButton.clicked.disconnect(self.firtPyQt5_button_click_2)

v,自定义信号

PyQt5提供了QtCore.pyqtSignal函数来产生一个signal,之后就是熟悉的绑定操作了,看个实例就清楚了

class EmitSignal(QWidget):
    def __init__(self):
        super(EmitSignal,self).__init__()
        self.customSignal = pyqtSignal()

    def emitCustomSignal(self):
        self.customSignal.emit()

资源文件

在QtDesigner引用资源文件之前,需要先准备一个qrc文件,它跟xml文件比较类似,用来制定资源文件的路径

<RCC version="1.0">
    <qresource>
        <file>qt.png</file>
        <file>penguin.jpg</file>
    </qresource>
</RCC>

然后引用
这里写图片描述

将UI文件转为python代码

pyuic5 -o firstPyQt5.py firstPyQt5.ui

pyqt线程

启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程中。
如果在UI线程中执行网络连接和数据库操作等耗时的操作,界面会被卡住,Windows下有可能会出现“无响应”的警告。
阻塞UI线程会降低用户体验和应用稳定性。因此我们可以把耗时操作放在线程中去执行。
QThread代表一个线程,我们可以复写run函数来执行我们要的操作。
QThread可以使用 QtCore.pyqtSignal 来与界面交互和传输数据。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'hh.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtWidgets
class TimeThread(QtCore.QThread):
    signal_time = QtCore.pyqtSignal(str, int)  # 信号
    def __init__(self, parent=None):
        super(TimeThread, self).__init__(parent)
        self.working = False
        self.num = 0

    def start_timer(self):
        self.num = 0
        self.working = True

    def stop_timer(self):
        self.working=False

    def run(self):
        while self.working:
            self.signal_time.emit("Running time:", self.num)  # 发送信号
            self.num += 1
            self.sleep(1)
class Ui_MainWindow(object):
    def __init__(self):
        super(Ui_MainWindow, self).__init__()
        self.timer_t = TimeThread()
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(350, 170, 300, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(270, 240, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(420, 240, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.addslot()

    def addslot(self):
        self.timer_t.signal_time.connect(self.update_timer_tv)
        # add signal an slot
        self.pushButton_2.clicked.connect(self.click_start_btn)
        self.pushButton_3.clicked.connect(self.timer_t.stop_timer)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "wait"))
        self.pushButton_2.setText(_translate("MainWindow", "start"))
        self.pushButton_3.setText(_translate("MainWindow", "quit"))

    def click_start_btn(self):
        if(~self.timer_t.isRunning()):
            self.timer_t.start()
        self.timer_t.start_timer()

    def update_timer_tv(self, text, number):
        self.pushButton.setText(text + " " + str(number))

main.py

# -*- coding: utf-8 -*-
__author__ = 'maolanhan@gmail.com'

import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
from hh import *



if __name__=="__main__":
	app=QApplication(sys.argv)
	mainWindow=QMainWindow()
	ui=Ui_MainWindow()
	ui.setupUi(mainWindow)
	mainWindow.show()
	sys.exit(app.exec_())

结果:
这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值