【PyQt】02-基础知识

一、第一个pyqt程序

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)
    #sys.argv当做参数的目的是将运行时的命令参数传递给QApplication对象
    w = QWidget()
    w.setWindowTitle("第一个PyQt")
    # 设置窗口标题
    w.show()
    # 展示窗口
    app.exec()
    # 程序进行循环等待状态

二、模块及基本UI

模块

PyQt中有非常多的功能模块,开发中最常用的功能模块主要有三个:
**QtCore:**包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用
**QtGui:**包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类
**QtWidgets:**包含了一些列创建桌面应用的UI元素
可以参考PyQt官网的所有模块,【重要-官方文档】地址:https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html#ref-module-index

C++具体实现的API文档,地址:https://doc.qt.io/qt-5/qtwidgets-module.html

基本UI

按钮:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QWidget()
    w.setWindowTitle("第一个PyQt程序")
    # 在窗口里面添加控件
    btn = QPushButton("按钮")
    # 设置按钮的父亲是当前窗口,等于是添加到窗口中显示
    btn.setParent(w)
    w.show()
    # 程序进行循环等待状态
    app.exec()

文本框:

  # 下面创建一个Label(纯文本),在创建的时候指定了父对象
    label = QLabel("账号: ", w)
  # 显示位置与大小 : x, y , w, h
    label.setGeometry(20, 20, 30, 30)

输入框:

    edit = QLineEdit(w)
    edit.setPlaceholderText("请输入账号")
    edit.setGeometry(55, 20, 200, 20)

调整窗口大小:

  # 窗口的大小
    w.resize(300, 300)

将窗口显示在屏幕中间:

 # 调整窗口在屏幕中央显示
    center_pointer = QDesktopWidget().availableGeometry().center()
    x = center_pointer.x()
    y = center_pointer.y()
    print(w.frameGeometry()) #打印出坐标/宽高
    print(w.frameGeometry().getRect())
    print(type(w.frameGeometry().getRect()))
    old_x, old_y, width, height = w.frameGeometry().getRect()
    w.move(x - width / 2, y - height / 2)

设置窗口icon:
找图标推荐阿里巴巴矢量图标库:
https://www.iconfont.cn/?spm=a313x.7781069.1998910419.d4d0a486a

import sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个QWidget
    w = QWidget()
    # 设置标题
    w.setWindowTitle("看看我图标帅吗")
    # 设置图标
    w.setWindowIcon(QIcon('panda.png'))
    # 显示QWidget
    w.show()

    app.exec()

三、布局

在Qt里面布局分为四个大类 :

  • QBoxLayout 盒子布局
  • QGridLayout 栅格布局
  • QFormLayout 表单布局
  • QStackedLayout 抽屉布局 提供了多页面切换的布局,一次只能看到一个界面。

注:
QBoxLayout
一般使用它的两个子类QHBoxLayout 和 QVBoxLayout 负责水平和垂直布局
示例:

import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton, QGroupBox, QMainWindow
from PyQt5.QtCore import Qt

class MyWindow(QWidget): #自定义类
    def __init__(self):
        # 切记一定要调用父类的__init__方法,因为它里面有很多对UI空间的初始化操作
        super().__init__()
        # 设置大小
        self.resize(300, 300)
        # 设置标题
        self.setWindowTitle("垂直布局")
        # 垂直布局
        layout = QVBoxLayout()
        # 作用是在布局器中增加一个伸缩量,里面的参数表示QSpacerItem的个数,默认值为零
        # 会将你放在layout中的空间压缩成默认的大小
        # 下面的 空间比例关系 1:1:1:2
        layout.addStretch(1)    #加弹簧

        # 按钮1
        btn1 = QPushButton("按钮1")
        # 添加到布局器中
        layout.addWidget(btn1)

        layout.addStretch(1)

        # 按钮2
        btn2 = QPushButton("按钮2")
        # 添加到布局器
        layout.addWidget(btn2)
        layout.addStretch(1)
        
        # 按钮3
        btn3 = QPushButton("按钮3")
        # 添加到布局器
        layout.addWidget(btn3)
        layout.addStretch(2)
        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 创建一个QWidget子类
    w = MyWindow()
    w.show()
    app.exec()

四、窗口

在Qt中,生成窗口有三种方式: QWidget | QMainWindow | QDialog
与qt所学一样。

五、信号和槽

1. 信号(signal)
其实就是事件(按钮点击 、内容发生改变 、窗口的关闭事件) 或者是 状态 (check选中了, togglebutton 切换。)

2. 槽( slot)
若想捕获这个信号,然后执行相应的逻辑代码,那么就需要使用到 槽 , 槽实际上是一个函数, 当信号发射出来后,会执行与之绑定的槽函数

3. 将信号与槽链接
为了能够实现,当点击某个按钮时执行某个逻辑,需要把具体的信号和具体的槽函数绑定到一起.

对象.信号.connect(槽函数)

注意:声明一个信号,只能放在函数的外面

你可能感兴趣的:(python机器学习,pyqt,qt,ui,python)