PyQt5常用功能三

日历

QCalendarWidget 提供了基于⽉份的⽇历插件,⼗分简易⽽且直观

from PyQt5.QtWidgets import (QWidget, QCalendarWidget,QLabel, QApplication, QVBoxLayout)
from PyQt5.QtCore import QDate
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):vbox = QVBoxLayout(self)cal = QCalendarWidget(self)cal.setGridVisible(True)cal.clicked[QDate].connect(self.showDate)vbox.addWidget(cal)self.lbl = QLabel(self)# 使⽤ selectedDate() ⽅法获取选中的⽇期,然后把⽇期对象转成字符串,在标签⾥⾯显⽰出来date = cal.selectedDate()  # 默认选中当前⽇期self.lbl.setText(date.toString())vbox.addWidget(self.lbl)self.setLayout(vbox)self.setGeometry(300, 300, 350, 300)self.setWindowTitle('Calendar')self.show()def showDate(self, date):self.lbl.setText(date.toString())if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

在这里插入图片描述

⾏编辑

QLineEdit 组件提供了编辑⽂本的功能,⾃带了撤销、重做、剪切、粘贴、拖拽等功能

import sys
from PyQt5.QtWidgets import (QWidget, QLabel,QLineEdit, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.lbl = QLabel(self)qle = QLineEdit(self)qle.move(60, 100)  # 原来第⼀个数是列,第⼆个数是⾏self.lbl.move(60, 40)# 如果输⼊框的值有变化,就调⽤ onChanged() ⽅法qle.textChanged[str].connect(self.onChanged)self.setGeometry(300, 300, 280, 170)self.setWindowTitle('QLineEdit')self.show()def onChanged(self, text):# 把⽂本框⾥的值赋值给了标签组件self.lbl.setText(text)# 让标签⾃适应⽂本内容self.lbl.adjustSize()  # 没有这⾏,后⾯的字就没办法完全显示if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

在这里插入图片描述

QSplitter

QSplitter 组件能让⽤户通过拖拽分割线的⽅式改变⼦窗⼜⼤⼩的组件

from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):hbox = QHBoxLayout(self)topleft = QFrame(self)topleft.setFrameShape(QFrame.StyledPanel)topright = QFrame(self)topright.setFrameShape(QFrame.StyledPanel)bottom = QFrame(self)bottom.setFrameShape(QFrame.StyledPanel)splitter1 = QSplitter(Qt.Horizontal)splitter1.addWidget(topleft)splitter1.addWidget(topright)splitter2 = QSplitter(Qt.Vertical)splitter2.addWidget(splitter1)splitter2.addWidget(bottom)hbox.addWidget(splitter2)self.setLayout(hbox)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('QSplitter')self.show()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

缩放窗口内部小窗口会随之改变,上下拉伸时,只有最下方的窗口会改变
在这里插入图片描述

下拉选框

QComboBox 组件能让⽤户在多个选择项中选择⼀个

from PyQt5.QtWidgets import (QWidget, QLabel,QComboBox, QApplication)
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.lbl = QLabel("Ubuntu", self)# 创建⼀个 QComboBox 组件和五个选项combo = QComboBox(self)combo.addItem("Ubuntu")combo.addItem("Mandriva")combo.addItem("Fedora")combo.addItem("Arch")combo.addItem("Gentoo")combo.move(50, 50)self.lbl.move(50, 150)combo.activated[str].connect(self.onActivated)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('QComboBox')self.show()def onActivated(self, text):# 设置标签内容为选定的字符串,然后设置⾃适应⽂本⼤⼩                                                                                                                                                                                                                                                                                              self.lbl.setText(text)self.lbl.adjustSize()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

本例包含了⼀个 QComboBox 和⼀个 QLabel ,下拉选择框有五个选项
在这里插入图片描述

拖拽

在GUI⾥,拖放是指⽤户点击⼀个虚拟的对象,拖动,然后放置到另外⼀个对象上⾯的动作。⼀般
情况下,需要调⽤很多动作和⽅法,创建很多变量。

⼀般情况下,我们可以拖放两种东西:数据和图形界⾯。把⼀个图像从⼀个应⽤拖放到另外⼀个应
⽤上的实质是操作⼆进制数据。把⼀个表格从Firefox上拖放到另外⼀个位置 的实质是操作⼀个图形
组。

简单的拖放

本例使⽤了 QLineEdit 和 QPushButton 。把⼀个⽂本从编辑框⾥拖到按钮上,更新按钮上的标签

from PyQt5.QtWidgets import (QPushButton, QWidget, QLineEdit, QApplication)
import sysclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)# 激活组件的拖拽事件self.setAcceptDrops(True)# 重构dragEnterEvent() ⽅法def dragEnterEvent(self, e):# 设定接受拖拽的数据类型(plain text)if e.mimeData().hasFormat('text/plain'):e.accept()else:e.ignore()# 重构 dropEvent() ⽅法def dropEvent(self, e):# 更改按钮接受⿏标的释放事件的默认⾏为self.setText(e.mimeData().text())class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):edit = QLineEdit('', self)edit.setDragEnabled(True)edit.move(30, 65)button = Button("Button", self)button.move(190, 65)self.setWindowTitle('Simple drag and drop')self.setGeometry(300, 300, 300, 150)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()ex.show()app.exec_()

QLineEdit 默认⽀持拖拽操作,所以我们只要调⽤ setDragEnabled() ⽅法使⽤就⾏了
初始窗口:
在这里插入图片描述
在输入框输入文字,选中并拖到按钮上:
在这里插入图片描述

拖放按钮组件

from PyQt5.QtWidgets import QPushButton, QWidget, QApplication
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
import sysclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)def mouseMoveEvent(self, e):  # 原⽅法是计算⿏标移动的距离,防⽌⽆意的拖动if e.buttons() != Qt.RightButton:returnmimeData = QMimeData()drag = QDrag(self)drag.setMimeData(mimeData)drag.setHotSpot(e.pos() - self.rect().topLeft())drag.exec_(Qt.MoveAction)def mousePressEvent(self, e):super().mousePressEvent(e)# 只修改按钮的右键事件,左键的操作还是默认⾏为if e.button() == Qt.LeftButton:print('press')class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setAcceptDrops(True)  # 这个应该是允许拖动的意思self.button = Button('Button', self)self.button.move(100, 65)self.setWindowTitle('Click or Move')self.setGeometry(300, 300, 280, 150)def dragEnterEvent(self, e):e.accept()def dropEvent(self, e):position = e.pos()self.button.move(position)e.setDropAction(Qt.MoveAction)e.accept()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()ex.show()app.exec_()

右键点击按钮可以实现拖拽
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux高阶——0928—Github本地仓库与云端仓库关联

1、安装代理软件 steam 选择Github和系统代理模式,一键加速即可 2、 安装Git 3、访问Github网站,创建新用户 4、Github探索 (1)Explore探索标签 (2)工程结构 用户名/仓库名 自述文件,用markdo…

SPI通信——FPGA学习笔记14

一、简介 SPI(Serial Periphera Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、F…

Redis配置篇 - 指定Redis配置的三种方式,以及Redis配置文件介绍

文章目录 1 指定Redis配置的三种方式1.1 通过命令行参数来指定Redis配置1.2 通过配置文件来指定Redis配置1.3 在服务器运行时更​​改 Redis 配置 2 关于Redis配置文件 1 指定Redis配置的三种方式 1.1 通过命令行参数来指定Redis配置 在redis启动时,可以直接通过命…

绿野仙踪不仅是童话,还是便宜又好用的产品测试法!

以 ChatGPT 为代表的大语言模型爆火后,推动了对话类人工智能产品的高速发展,我们已经看到了如智能助理、问答系统、自动写作等多种类型的个性化对话类 AI 服务。 AI 能力的提升让人们对智能 AI 产品的期望越来越高,相关产品的用户体验也因此变…

豆包MarsCode 合伙人计划限时招募中,推广最高赢万元现金!

豆包MarsCode 合伙人计划正式上线啦!作为官方推出的推广激励项目,豆包MarsCode 编程助手号召和鼓励所有用户向我们推荐新用户。 现在正式开启首轮合伙人招募,诚邀各位有意愿推广普及 AI 编程产品的伙伴成为我们的合伙人,全国限量…

jmeter输出性能测试报告(常见问题处理与处理)

问题1:报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows R 意思是:报没有权限 处理: 操作非gui生成测试报告的方法 cmd界面进入到 jmeter的bin目录 jmeter –n –t -l -e –o …

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后: 解决方式 方式一 在属性中加上注解,对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面,并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后,会进入这样一个界面,这个基本上后续就后台了 本人在网上冲浪了很久,一直也没…

DGX的优势

NVIDIA DGX 的 AI 领导力 文章目录 前言一、概述推动跨行业的 AI 创新二、优势客户体验到哪些好处?1. 利用生成式 AI 释放研究人员的潜力2. 加快现代应用程序的上市时间3. 利用 AI 改善客户体验三、性能性能很重要1. 为世界上最先进的超级计算机提供动力2. 打破世界纪录3. 提高…

ES6总结

1.let和const以及与var区别 1.1 作用域 var: 变量提升(Hoisting):var 声明的变量会被提升到其作用域的顶部,但赋值不会提升。这意味着你可以在声明之前引用该变量(但会得到 undefined)。 con…

CSS元素显示类型

display 属性是 CSS 中最重要的属性之一&#xff0c;主要用来控制元素的布局&#xff0c;通过 display 属性您可以设置元素是否显示以及如何显示。 根据元素类型的不同&#xff0c;每个元素都有一个默认的 display 属性值&#xff0c;例如<div>默认的 display 属性值为 …

电脑端视频通过PCIE到FPGA端转UDP网络视频输出,基于XDMA+PHY芯片架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC数据缓冲FIFO组Tri Mode E…

STM32编码器接口

一、概述 1、Encoder Interface 编码器接口概念 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用…

CSS 3D转换

在 CSS 中&#xff0c;除了可以对页面中的元素进行 2D 转换外&#xff0c;您也可以对象元素进行 3D转换&#xff08;将页面看作是一个三维空间来对页面中的元素进行移动、旋转、缩放和倾斜等操作&#xff09;。与 2D 转换相同&#xff0c;3D 转换同样不会影响周围的元素&#x…

CVE-2024-36971漏洞修复----Debian 10.13 内核升级

CVE-2024-36971漏洞修复---Debian 10.13 内核升级 1. 下载内核2. 安装依赖包3. 二进制安装3.1 上传3.2 解压3.3 修改配置文件3.4 编译3.5 安装内核及模块 4. 重启服务器并确认升级成功 1. 下载内核 到kernel.org下载新版的Kernel 由于开发那边不想让Kernel跨大版本,所以就升级…

OpenCV高级图形用户界面(1)创建滑动条函数createTrackbar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个滑动条并将其附加到指定的窗口。 该函数 createTrackbar 创建一个具有指定名称和范围的滑动条&#xff08;滑块或范围控制&#xff09;…

机器学习笔记-1

文章目录 前言一、How to find a function二、Define Loss from Training Data三、Optimization总结 前言 机器学习&#xff08;Machine Learning, ML&#xff09;是一门让计算机通过数据来自动学习和改进的技术。它的核心理念是通过分析大量的历史数据来找到其中的规律&#…

Qt-链接数据库可视化操作

1. 概述 Qt 能够支持对常见数据库的操作&#xff0c;例如&#xff1a; MySQL、Oracle、SqlServer 等等。 Qt SQL模块中的API分为三层&#xff1a;驱动层、SQL接口层、用户接口层。 驱动层为数据库和SQL接口层之间提供了底层的桥梁。 SQL接口层提供了对数据库的访问&#xff0…

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键 第一节 硬件解读第二节 CubeMX配置第三节 MDK代码 第一节 硬件解读 扩展模块和ADC模块是一摸一样的&#xff0c;插在主板上。 引脚对应关系&#xff1a; PB6-ROW1 PB7-ROW2 PB1-COLUMN1 PB0-COLUMN2 PA8-COLUMN3 …

adb安装教程(Windows10)

本章教程&#xff0c;主要介绍如何在Windows10操作系统上安装adb。 一、adb简介 ADB&#xff0c;全称为Android Debug Bridge&#xff0c;是Android开发中一个重要的命令行工具。它用于与Android设备进行通信&#xff0c;提供了多种功能来帮助开发者进行调试和应用管理。 二、下…