一文pyqt篇

一、第一个pyqt程序

在这里插入图片描述
类的写法:
在这里插入图片描述

二、模块介绍

在这里插入图片描述

三、控件

3.1 QPushbutton,QRadioButton,QGroupBox

在这里插入图片描述
在这里插入图片描述

3.2 Qlable

在这里插入图片描述

3.3 QLineEdit

在这里插入图片描述

3.4 窗口调整

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、布局

4.1 QBoxLayout

QVBoxLayout
在这里插入图片描述
在这里插入图片描述
QHBoxLayout
在这里插入图片描述

4.2 QGridLayout

在这里插入图片描述

4.3 QFormLayout

表单提交
在这里插入图片描述

4.4 QStackedLayout

抽屉布局:提供了多页面切换的布局,一次只能看到一个界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、窗口

5.1 分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、信号与槽

6.1 介绍

在这里插入图片描述
在这里插入图片描述

6.2 案例一:clicked

在这里插入图片描述

6.3 案例二:自定义信号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4 案例三:模拟消息发送

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.5 信号与槽注意事项

是信号(Signal)和槽(Slot)主要是用于窗体间通讯,想要执行异步操作还需要多线程。

信号的对象不需要知道有几个槽函数,也不需要关系是否收到信号,或者谁收到了,谁没收到。同样的槽函数也不需要知道谁是信号的发出者。信号只需要在合适的时机发出即可,降低了对象之间的耦合度。

注意:

1、一个信号可以连接到多个槽:

connect(sender, SIGNAL(mySignal(int)),receiver1, SLOT(mySlot(int)));
connect(sender, SIGNAL(mySignal(int),receiver2, SLOT(mySlot(int)));

当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。

2、多个信号可以连接到同一个槽

connect(sender1 SIGNAL(mySignal1()), receiver, SLOT(mySlot()));
connect(sender2, SIGNAL(mySignal2()),receiver, SLOT(mySlot()));

任何一个信号发出,槽函数都会执行。

3、一个信号可以和另一个信号相连

connect(sender, SIGNAL(mySignal1()),this, SIGNAL(mySignal2()));

第一个信号发出后,第二个信号也同时发送。除此之外,信号与信号的连接和信号与槽连接相同。

4、连接可以被删除

disconnect(sender, SIGNAL(mySignal()),receiver, SLOT(mySlot()));

这个函数很少使用,因为当一个对象被删除后,Qt自动删除这个对象的所有连接。

5、参数设置

信号和槽函数必须有着相同的参数类型及顺序,这样信号和槽函数才能成功连接:

connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int, const QString &)));

如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:

connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int)));

可以使用json,在定义信号时,将参数类型定义为str,emit函数时传入json.dumps(字典),这样不论是多少个参数都能传递到信号,信号调用槽函数时,json.loads(str)就可以得到参

startsignal = pyqtsignal(str);
self.btn.emit(json.dumps({"user":username,"pwd":password}));
def run(str){
	params = json.loads(str);
	username = params.get("user");
	password = params.get("pwd");
}

6、获得对象

QObject * QObject::sender () const [protected]

sender () 函数返回 信号发出者 的 QObject型指针。

对QObject型指针进行强制转换得到需要的。

在槽函数里使用得到信号发送对象。

例如:

mySlot(){

    currentGlWidget = qobject_cast<GLWidget *>(sender());

    QPushButton* btn= dynamic_cast<QPushButton*>(sender())

}

带返回值的信号槽,槽函数有返回值

可通过

value = emit mysignal() 

得到返回值。

七、Qt Designer

7.1 动态加载ui

.ui -》uic.loadUi()
在这里插入图片描述

7.2 获取控件

在这里插入图片描述
在这里插入图片描述
方便对控件绑定槽函数

八、多线程

只要是带界面的程序,一般来说程序运行后,会用当前线程进行事件的检查,按钮等图形界面的更新操作,如果在执行某个逻辑代码时,耗时严重就会出现界面卡顿。
所以一般将界面的显示用主线程来操作,逻辑功能代码或者耗时操作的代码都用另外线程处理。

8.1 多线程示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2 多个线程之间信号传递

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接云函数
在这里插入图片描述
子线程发送显示信号给主界面线程
信号在界面类中创建,连接,槽函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
子线程如何知道界面线程的信号?创建子线程对象时当参数传入线程类。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43676010/article/details/128186057