相关文章推荐
腹黑的机器猫  ·  background-color ...·  1 年前    · 
直爽的伏特加  ·  IJCAI ...·  1 年前    · 



文章目录

  • 一、基本窗口的绘画
  • 1. 示例:程序的基本结构
  • 2. 创建多个控件
  • 3. 控件的父子关系
  • 二、练习


一、基本窗口的绘画

1. 示例:程序的基本结构

pyQt5 很方便的创建一个窗口,以下几行代码既可以创建一个基本的窗口,并设置了其大小,显示位置和标题:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
    app = QApplication(sys.argv)   #sys.argv 是运行python脚本的时候 可以往程序输入参数
    w = QWidget()                  #创建窗口对象
    w.resize(250, 150)             #窗口大小
    w.move(300, 300)               #窗口位置:即运行程序后,窗口的坐标
    w.setWindowTitle('Simple')     #设置标题为:simple
    w.show()                       #显示窗口
    sys.exit(app.exec_())          #程序进入了循环

效果如下:

python直接在屏幕上绘制 python绘制窗口_标题栏


这个简单的程序演示了怎么设置一个窗口的名称等,pyQt还提供了设置窗口的图标,是否显示标题栏等等。

2. 创建多个控件

上一个程序创建了一个QWidget控件,同样的方法可以再创建一个:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
    app = QApplication(sys.argv)  
    # 第一个控件
    w1 = QWidget()
    w1.resize(250, 150) 
    w1.move(300, 300) 
    w1.setWindowTitle('First ')
    w1.show()
    # 第二个控件
    w2 = QWidget()
    w2.resize(250, 150)
    w2.move(100, 200)
    w2.setWindowTitle('Second')
    w2.show()
    sys.exit(app.exec_())  # 程序进入了循环

效果如下所示:

python直接在屏幕上绘制 python绘制窗口_标题栏_02


可以看到我们创建了2个窗口,标题名为 Second 的窗口在 First 之上,可以知道pyQt默认后创建的控件在上层。

3. 控件的父子关系

指定控件的父子关系,方便统一管理。比如在一个对话框中,里面的拥有QButton,QLabel,QTextEdit控件可以作为这个对话框的子控件,这样当父控件(对话框)被销毁的时候,子控件也自动销毁,而且子控件会约束在父控件中。
上一段代码我们创建了两个空间,现在我们让其中一个作为子控件,另一个作为父控件:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 父控件
    f = QWidget()
    f.resize(250, 150)
    f.move(100, 200)
    f.setWindowTitle('MainWindow')              #父控件坐标:原点(0,0)为屏幕的最左上角
    # 子控件
    s = QWidget()
    s.resize(50, 100)
    s.move(10, 10)                              #子控件坐标:原点(0,0)为父控件的最左上角
    s.setParent(f)                              #设置f为s的父控件
    s.setStyleSheet("background:red;")          #设置s这个控件的背景颜色为红色
    f.show()                                    #显示父控件,子控件也自动显示
    sys.exit(app.exec_())                       # 程序进入了循环

运行效果如下:

python直接在屏幕上绘制 python绘制窗口_控件_03


这段程序有以下几个知识点:

  1. 设置父子控件的代码为: s.setParent(f)
  2. 子控件没有设置标题栏,是因为没有作用,因为这个控件并没有标题栏,f控件是因为是顶层控件,所以系统自动给添加的,因为这是一个普通基本窗口都会有的结构。
  3. 通过设置控件的表来配置控件的背景颜色,当然,可以设置显示的文字像素大小,字体等,这里暂且不详说。

创建父控件还有另一种方便的方式,即在创建子控件时候,参数写入父控件,可一步完成创建控件和指定父控件的操作,程序如下所示:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 父控件
    f = QWidget()
    f.resize(250, 150)
    f.move(100, 200)
    f.setWindowTitle('MainWindow')              #父控件坐标(0,0)为屏幕的最左上角
    # 子控件
    s = QWidget(f)                              #创建子控件s,并指定f为其父空间
    s.resize(50, 100)
    s.move(10, 10)                              #子控件坐标(0,0)为父控件的最左上角
    s.setStyleSheet("background:red;")          #设置s这个控件的背景颜色为红色
    f.show()                                    #显示父控件,子控件也自动显示
    sys.exit(app.exec_())                       # 程序进入了循环

这段程序使用 s=QWidget(f) 来指定f为s的父控件,所以也不再需要 s.setParent(f),注意到,每一个子控件可以指定一个父控件,也只能拥有一个父控件,如果重复指定,那么只有最后指定的父控件是有效的。

二、练习

设计一个简单的窗口,运行效果如下:

python直接在屏幕上绘制 python绘制窗口_标题栏_04

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 父控件
    f = QWidget()
    f.resize(250, 150)
    f.move(100, 200)
    f.setWindowTitle('MainWindow')              #父控件坐标(0,0)为屏幕的最左上角
    redb = QPushButton('red', f)                #这是显示的文字为‘red’,指定父控件为f
    redb.setCheckable(True)
    redb.move(10, 10)
    redb.setStyleSheet("background:red;font-size:20px;")
    greb = QPushButton('green', f)
    greb.setCheckable(True)
    greb.move(100, 10)
    greb.setStyleSheet("background:green;font-size:10px;")
    f.show()                                    #显示父控件,子控件也自动显示
    sys.exit(app.exec_())                       # 程序进入了循环


python onnxruntime 模型推理 使用GPU

文章目录5.使用枚举类5.1第一种实现方式5.2第二种实现方式6.使用元类6.1type()6.2参数一:class的名称6.3参数二:元类metaclass6.4元类metaclass的应用:orm实现 5.使用枚举类当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份:JAN = 1 FEB = 2 MAR = 3 NOV = 11 DEC = 12好处是简单,缺点是类