pyqt笔记-day1

视频链接:https://www.bilibili.com/video/BV1Ut4y1i7zy?p=4

一、 常用模块
在这里插入图片描述
可以在pyqt官方文档中的classes检索某一个控件所属模块
在这里插入图片描述
二、PyQt基本结构
在这里插入图片描述
sys在这里可做命令行解析,当用户通过命令行运行程序时,可以根据不同参数执行不同的业务逻辑。sys.argv是一个列表,第一个参数是程序名,后面参数由用户在命令行提供。
在这里插入图片描述
在Qt中,可以通过命令行参数传递给整个应用程序对象,从而在应用程序内部实现不同业务逻辑
在这里插入图片描述

在这里插入图片描述
sys.exit()可以获取程序的退出值。如果是正常退出则为0,非正常为非零,通常为1。
app.exec_()让整个程序开始执行并进入到无限循环
在这里插入图片描述
动态加载代码模块
在这里插入图片描述
Abbreviation是代称,Description是该模块的描述,Template text是模块内容,使用$text$ 实现可修改部分。

在这里插入图片描述
继承,子类要想调用父类中的方法,应该要有方法的继承或者在子类中直接调用父类中的方法。

基本结构:
在这里插入图片描述
通常将所有控件都放在 setup_ui()中,为了使代码整体具有结构性,不同功能的模块从setupui中拆封出去。
观察Qtdesigner导出的py文件为三个重要部分:
在这里插入图片描述
1.class Ui_Form(object) 表示Ui_Form继承了基类Objetc
2.def setupUi(self, Form) 包含了所有子控件及其属性。Form是Qtweight()的实例,其作为主窗口,即整个程序中所有子控件的父控件,保证所有控件都能在主窗口中显示出来
该代码块中有两处重要信息:
第一处:在这里插入图片描述
展现了各种布局,groupBox、label等控件在实例化时的参数。 setupUi具有一个参数Form,它实际上是一个Qtweight()实例。
第二处:
在这里插入图片描述
将一些样式信息放在retranslateUi中

  1. def retranslateUi(self, Form)则定义了窗口的一些属性
    在这里插入图片描述
if __name__=='__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()  # 实例化一个控件
    ui=Ui_Form()  # 实例化一个能够给主窗口配置子空间的对象
    ui.setupUi(widget)  # widget为主控件(窗口),将各类子控件添加到主窗口中
    widget.show()  # 展示主窗口
    sys.exit(app.exec())

通过上述的理解,我们可以吧Qtdesigner生成的Ui_Form()实例化,并通过该对象的setupUi方法给任一一个QWidget()对象配置控件。这也从侧面说明了为什么Qtdesigner生成的Ui_Form()中两个重要的方法都有一个Form参数。
下述代码进一步说明pyqt中的设计哲学:

window = QMainWindow()  # 实例化主窗口控件,作为下面所有子控件的父控件
textEdit = QPlainTextEdit(window)  # 在 Qt 系统中,控件(widget)是 层层嵌套 的,除了最顶层的主控件,其他的控件都有父控件。我们想在上面的窗口中放入一个文本编辑框,就需要在实例化文本编辑框时传入它的父控件作为参数
window.show()  # 只有当实例化的主窗口执行show方法时,他才能在桌面上显示
app.exec_()  # 进入QApplication的事件处理循环,接收用户的输入事件(),并且分配给相应的对象去处理。

只要有类似这样QPlainTextEdit(window)的子控件(主窗口)的代码,都可以给主窗口添加控件,该语句会返回一个对象实例。通过调用该对象实例的方法,将信号和槽联系起来即可实现控件与函数的结合。那么下面这段代码也就很好理解了
在这里插入图片描述
在实际开发中,我们当然不会直接在UI文件中实例化整个图像界面,而是把ui文件封装起来,通过在主程序中继承ui文件实现界面开发

class MyMainForm(QWidget, Ui_Form ,method):
	# 继承QWidget, Ui_Form ,method三个类,其中method中可以封装很多底层代码逻辑
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)  # python2中的写法
        self.setupUi(self)  # MyMainForm为QWidget实例,作为参数传递给setupUi()时即可使主窗口具有设计好的控件
if __name__=='__main__':
    # 固定用法,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 实例化控件
    myWin = MyMainForm()
    # 实例化主窗口
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

三、PyQt中常用类的属性和名称
1.基类QObject
该基类所具有的属性和方法是所有控件所共有的,其中setObjectName(),serProperty()是两个比较常用的方法
在这里插入图片描述
在这里插入图片描述
应用场景
在这里插入图片描述
在这里插入图片描述
qss样式表实际上是一个字符串,可以修改标签的样式(字体,颜色等…),如下图设置label的样式
在这里插入图片描述
然而在实际应用中,有多处地方需要设计样式,为了实现样式表和控件的分离,通常会把qss表放在一个单独的文件中

1.将所有qss样式表保存到单独的文件中,文件以.qss后缀命名。如Object.qss。
在这里插入图片描述
2.在qss文件中 以

控件名{
	样式表  # 空四格
}  # 指定某类控件的样式信息

3.在UI文件中读取样式表信息并将信息赋给整个程序的全局信息。

with open("QObject.qss","r") as f
	aQpp.setStylesheet(f.read())  # 读取qss文件,并设置应用程序中的全部对象,之后整个应用程序的控件只要匹配到了样式表的样式信息都会有效

实际开发中,同类控件的样式都一样显然是不合适的,因此可以使用setObjectName方法设置对象的唯一名称。比如我们需要开发两种样式的标签(一种要求是红色字体,一种要求是蓝色字体),只需要在创建标签对象是利用setObjectName指定唯一名称,并在qss文件中添加注释即可:
在这里插入图片描述
在这里插入图片描述
通过

控件名#ObjectName{
	样式表  # 空四格
}  # 通过#ObjectName指定特定名称的对象的样式

在这里插入图片描述
上述例子中,三个label标签,只有名称叫notice的才会应用样式表。同一名称的对象可能还需要不同样式表区分。在setObjectName(‘唯一名称’)的基础上,还可以通过**setProperty(‘属性名称’,值)**给控件对象设置唯一属性。如下图:
在这里插入图片描述
在qss文件中,使用

控件名#ObjectName{
	样式表  # 空四格
}  # 通过#ObjectName指定特定名称的对象的样式

控件名#ObjectName['property'=value]{
	样式表  # 空四格
}  # 再通过其属性的值设置更多样式

在这里插入图片描述
实际开发中的步骤
1.配置qss文件,设置好指定名称或属性的控件的样式
2.在主程序中继承QtDesigner生成的窗口控件
3.定义专门的配置控件样式的函数,并在构造函数中调用

from PyQt5.QtWidgets import QApplication,QMainWindow,qApp
from QtDesigner_form import Ui_Form
class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)  # python2中的写法
        self.setupUi(self)
        self.widght_stytle(self)
    def widght_stytle(self):
    	        with open('style.qss','r') as f:
            qApp.setStyleSheet(f.read())  # qApp可以获取应用程序的全局信息,即将style.qss中的样式应用到整个程序所有控件中

        # 通过setObjectName()给控件指定唯一名称,通过setProperty()给每个控件对象动态添加属性和值
        self.label.setObjectName("notice")
        self.cancel_pushButton.setObjectName("notice")
        self.cancel_pushButton.setProperty("notice_property",'blue')
     	

在这里插入图片描述
在这里插入图片描述
因为qss文件只配置了Qlabel的唯一名称和属性及其值,因此只会修改整个程序中QLabel的样式。在qss中增设QPushButton的样式后:

    def wight_stytle(self):
        with open('style.qss','r') as f:
            qApp.setStyleSheet(f.read())  # qApp可以获取应用程序的全局信息,即将style.qss中的样式应用到整个程序所有控件中

        # 通过setObjectName()给控件指定唯一名称,通过setProperty()给每个控件对象动态添加属性和值
        self.label.setObjectName("notice")
        self.cancel_pushButton.setObjectName("notice_pushbutton")

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值