PyQt5基础使用!(二)

QSlider的使用,SetObjectName的使用
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QHBoxLayout, QLabel, QVBoxLayout
from PyQt5.QtGui import QColor

class MyClass(QWidget):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('QSlider测试')
        self.setGeometry((app.desktop().width() - self.width()) / 2, 250, 400, 300)

        def slider():
            def vance(n):
                b = self.sender().objectName()
                eval(f'color.set{b}({n})')
                cn = color.name()
                cc.setText(cn)
                self.setStyleSheet('QWidget{background-color:%s}' % cn)

            hl = QHBoxLayout()
            color = QColor(0, 0, 0)
            self.setStyleSheet('QWidget{background-color:#000}')
            for i in ['Red', 'Green', 'Blue']:
                # Qt.Horizontal=1,Qt.Vertical=2
                sl = QSlider(2)
                sl.setMinimum(0)
                sl.setMaximum(255)
                sl.setObjectName(i)
                sl.valueChanged[int].connect(vance)
                hl.addWidget(sl)

            vl = QVBoxLayout(self)
            vl.addLayout(hl)
            cc = QLabel('RGB')
            cc.setStyleSheet('color:#fff;font-weight:700;'
                             'font-family:Microsoft YaHei;')
            vl.addWidget(cc)
        slider()

if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

QProgressBar+QBasicTimer的使用。

一、QBasicTimer

  1. isActive() 方法:布尔值,返回时钟控件是否开启。开启返回True,否则为False。
  2. Start(时间,self) 方法:开启时钟,第1参数是:时间间隔(单位为毫秒)。
  3. Stop 方法:关闭时钟。
  4. timerId 方法:返回当前时钟控件的 ID,窗体中有多个时钟控件时使用。
  5. 对应的槽方法是QWidget内置的 timerEvent() 事件,我们使用时钟的时候一般都要重写这个方法。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton
from PyQt5.QtCore import QBasicTimer


class MyClass(QWidget):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('QSlider测试')
        self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)

        def pgBar():
            self.pv = 0
            self.pgb = QProgressBar(self)
            self.pgb.resize(300, 20)
            self.pgb.setMinimum(0)
            self.pgb.setMaximum(100)
            self.pgb.setValue(self.pv)
            self.timer1 = QBasicTimer()
            self.btn = QPushButton('开始', self)
            self.btn.move(0, 50)

            def myTime():
                if self.timer1.isActive():
                    self.timer1.stop()
                    self.btn.setText('开始')
                else:
                    self.timer1.start(100, self)
                    self.btn.setText('暂停')
            self.btn.clicked.connect(myTime)

        pgBar()

    def timerEvent(self, e):
        if self.pv == 100:
            self.timer1.stop()
            self.btn.setText('完成')
        else:
            self.pv += 1
            self.pgb.setValue(self.pv)


if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

记得重写方法的要写在类的方法下面,否则写函数里面会重写QWidget不成功。
在这里插入图片描述

QLabel + QPixmap载入图片
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QHBoxLayout, QVBoxLayout
from PyQt5.QtGui import QPixmap


class MyClass(QWidget):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('QPixmap测试')
        self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)

        def pixMap():

            def cPic():
                if self.sender().text() == 'add Pic':
                    lbl.setPixmap(QPixmap('./More_threads_qt01/abc.jpg'))
                else:
                    lbl.setPixmap(QPixmap(''))

            lbl = QLabel('图片')
            lbl.setStyleSheet('background-color:black')
            lbl.setPixmap(QPixmap('./More_threads_qt01/asd5.jpg'))
            # lbl.resize(300, 200)
            lbl.setScaledContents(True)

            hl = QHBoxLayout()
            for i in ['add Pic', 'rem Pic']:
                btn = QPushButton(i)
                btn.clicked.connect(cPic)
                hl.addWidget(btn)
            vl = QVBoxLayout(self)
            vl.addWidget(lbl)
            vl.addLayout(hl)
        pixMap()

if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

QComboBox的运用
  1. 下拉菜单,可以二级联动。
  2. 通过 addItem() 方法,向 combobox 中装入项目。
  3. 通过 clear() 方法,清空所有添加的项目。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QLabel, QPushButton, QHBoxLayout, QVBoxLayout


class MyClass(QWidget):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('QPixmap测试')
        self.setGeometry((app.desktop().width() - self.width()) / 2, 400, 400, 300)

        def combox():
            def actiVate(s):
                self.sec_ld.clear()
                k = obj.get(s, '')
                if k != '':
                    self.sec_ld.addItems(k)
                else:
                    self.sec_ld.addItem('请选择城市')

            prov, city = QLabel('省'), QLabel('市')
            obj = {'广东': ['广州', '汕头'], '浙江': ['杭州', '宁波'], '安徽': ['合肥', '铜陵']}
            ls = [['请选择省份'] + list(obj.keys()), ['请选择城市']]

            def co_box(ls):
                cbx = QComboBox()
                cbx.addItems(ls)
                if len(ls) > 1:
                    cbx.setEditable(True)
                    cbx.editTextChanged[str].connect(actiVate)
                    # cbx.activated[str].connect(actiVate)
                return cbx

            hl = QHBoxLayout()
            self.sec_ld = co_box(ls[1])
            for i in [prov, co_box(ls[0]), city, self.sec_ld]:
                hl.addWidget(i)
            hl.addStretch()

            vl = QVBoxLayout(self)
            vl.addLayout(hl)
            vl.addStretch()

        combox()

if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

  1. cbx.editTextChanged[str].connect(actiVate):文本改变事件。(用户使用这个更方便,可以打字就自动触发事件。)
  2. cbx.activated[str].connect(actiVate):文本确认事件。
Calander日历
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QCalendarWidget, QVBoxLayout
from PyQt5.QtGui import QFont
from PyQt5.QtCore import QDate


class MyClass(QWidget):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('QSlider测试')
        self.setGeometry((app.desktop().width() - self.width()) / 2, 250, 400, 300)

        def cLand():
            def myDate(d):
                self.lbl.setText(d.toString('yyyy 年 M 月 d 日'))

            cal = QCalendarWidget()
            cal.clicked[QDate].connect(myDate)
            self.lbl = QLabel('这里显示日期')
            self.lbl.setFont(QFont('微软雅黑', 12))

            vl = QVBoxLayout(self)
            vl.addWidget(cal)
            vl.addSpacing(5)
            vl.addWidget(self.lbl)
            vl.addSpacing(2)

        cLand()


if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

使用QMainWindow的menuBar()方法创建工具栏
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMessageBox


class MyClass(QMainWindow):
    def __init__(self):
        super(MyClass, self).__init__()
        self.initUi()
        self.show()

    def initUi(self):
        self.setWindowTitle('Qmenu测试')
        self.setGeometry(app.desktop().width() / 2 - 302, 300, 300, 300)

        def mEnu():
            mb = self.menuBar()
            f1 = mb.addMenu('文件')
            self.n = 1

            def new_win():
                list1.append(MyClass_new(self.n))
                self.n += 1

            f1.addAction('New Window').triggered.connect(new_win)
            # 记得QAction实例化的时候后面要加self,不然没法显示出来
            f1.addMenu('最近文档').addActions([QAction(f'文档{i}', self) for i in range(3)])

            for i in ['编辑', '视图']:
                mb.addAction(i)

            ac = QAction('帮助', self)

            def hElp():
                meb = QMessageBox(QMessageBox.Information,
                                  '帮助',
                                  '欢迎和我交流,QQ:619342297',
                                  QMessageBox.Ok,
                                  self)
                meb.show()

            ac.triggered.connect(hElp)
            mb.addAction(ac)

        mEnu()


class MyClass_new(QMainWindow):
    def __init__(self, n):
        super(MyClass_new, self).__init__()
        self.initUi(n)
        self.show()

    def initUi(self, n):
        self.setWindowTitle(f'Qmenu子窗口{n}')
        self.setGeometry(app.desktop().width() / 2, 270 + n * 30, 250 + n * 10, 100)


if __name__ == '__main__':
    #  新建一个app(进程)
    app = QApplication(sys.argv)
    #  初始化基类
    myc = MyClass()
    # 初始化全局数组来承载新窗体
    list1 = []
    #  监控app的关闭键
    sys.exit(app.exec_())

在这里插入图片描述

主要是为了写个代码,以后用得着时可以直接调用,文件里的类直接继承QWidget,可以作为部件放入Layout中,省的以后还要麻烦重复的写代码。本人气象行业,会用到地图叠加风羽。 ---------- 主要实现了以下功能: 1. 绘制正常的折线或散点图(可以多条折线) 2. 绘制色斑图(等高线图) 3. 将数组显示为图片(主要是自己要用于卫星云图显示) 4. 利用basemap,在地图地图上添加风羽(风杆) ---------- 暂时先实现这些功能,方便再写界面的时候直接调用。basemap没有python3.6版本的,所以用的是非官方包。 文件说明: 一、总体说明 A、类 文件里分为两个类:PlotWidget和PlotGeoWidget文件里分为两个类:```PlotWidget```和```PlotGeoWidget``` B、用到的库 1、matplotlib(2.0.2) 2、PyQt5(5.6) 3、basement(第三方非官方包) 4、numpy(1.14.5) 5、math(python自带) 、PlotWidget类 A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout中作为一个普通部件 B、方法 1、plot_lines 功能:绘制线型图像(可多条曲线) ```def plot_lines(self, x_data, y_data, xlim=None, ylim=None, linestyle=['-'], linewidth=[2], linecolor=['black'], xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20, x_name=None, y_name=None, title=None, label=[None], label_loc='upper right')``` 参数解释: x_data、y_data: 要画的数据 必须在数据外面再套一个[],应为可能会容纳多组数据 例如只有一组数据[1,2,3,4,5],也需要在外面加上[]变成[[1,2,3,4,5]] xlim、ylim: 坐标轴范围,元组类型 例如:(0,100) linestyle、linewidth、linecolor: 线型线宽线色,列表 列表里每个元素都是按照matplotlib的线型线宽线色来表示 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 例如:[0,10,20,30] 代表在只显示10 20 30的刻度 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 前提是必须有xticks、yticks 例如:当xticks=[0,10,20,30]时,xlabels=['x', 'xx', 'xxx', 'xxxx']代表在0 10 20 30 刻度处显示'x', 'xx', 'xxx', 'xxxx'文字 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 x_name、y_name: 坐标轴标注 title: 图片题名 label: 图注,列表类型 label_loc: 图注位置,按照matplotlib图注规范 2、plot_contour 功能:画等值线图 ```def plot_contour(self, x_data, y_data, val, title=None, x_name=None, y_name=None, xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20)``` 参数解释: x_data、y_data、val: 要画的数据(x,y,z值) title: 图片题名 x_name、y_name: 坐标轴标注 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 3、plot_digital_image 功能:显示数字图像,如云图、照片等,但是需要先将图片转为数组 ```def plot_digital_image(self, img)``` 参数解释: img: 图片的数组 三、PlotGeoWidget A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout中作为一个普通部件 B、方法 1、map_wind 功能:显示本场周边地区地图,在地图上画出风杆 ```def map_wind(self, lon, lat, spe, dir)``` 参数解释: lon、lat: 经纬度,以小数表示 spe、dir: 风速风向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值