Tabla de contenido
1. Deje que el control admita acciones de arrastrar y soltar
Cuatro. Establecer diferentes estilos de fecha y hora
5. Funcionamiento avanzado del control de fecha y hora
1. Deje que el control admita acciones de arrastrar y soltar
Deje que el control admita acciones de arrastrar y soltar
Proceso:
A.setDrapEnabled (True) Establecer A para admitir arrastrar y soltar
B. setAcceptDrops (True) Establecer B para recibir
B necesita dos eventos:
1. dragEnterEvent se activa arrastrando A a B
2. dropEvent se activa cuando A se coloca en el área de B
Código:
import sys
from PyQt5.QtWidgets import *
#下拉框类
class MyComboBox(QComboBox):
def __init__(self):
super(MyComboBox, self).__init__()
#设置下拉框可接收
self.setAcceptDrops(True)
#别的控件拖进来以后,还没松鼠标时,下面的函数触发
def dragEnterEvent(self,e):
print(e)
#是否是文本
if e.mimeData().hasText():
e.accept()
else:
e.ignore()
#当控件拖进来放下时,下面的函数触发
def dropEvent(self,e):
#此时self代表当前下拉列表控件,
self.addItem(e.mimeData().text())
class DragDropDemo(QWidget):
def __init__(self):
super(DragDropDemo, self).__init__()
formLayout=QFormLayout()
formLayout.addRow(QLabel('请将左边的文本拖到右边的下拉列表中'))
lineEdit=QLineEdit()
#让QLinEdit控件可拖动
lineEdit.setDragEnabled(True)
#第一个类MyComboBox的实例
combo=MyComboBox()
formLayout.addRow(lineEdit,combo)
self.setLayout(formLayout)
self.setWindowTitle('拖拽案例')
self.resize(400,100)
if __name__=='__main__':
app=QApplication(sys.argv)
main=DragDropDemo()
main.show()
sys.exit(app.exec_())
resultado de la operación:
Ingrese en el cuadro de entrada de texto a la izquierda, y luego seleccione la parte que desea arrastrar, mantenga presionada y arrástrela al cuadro desplegable a la derecha, y el cuadro desplegable agregará la parte que acaba de arrastrar en el pasado . Inténtalo tú mismo.
2. Usa el portapapeles
Código:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class ClipBoardDemo(QDialog):
def __init__(self):
super(ClipBoardDemo, self).__init__()
#控件
#定义六个复制粘贴按钮,用来实现复制粘贴文本,图像和HTML网页
textCopyBtn=QPushButton('复制文本')
textPasteBtn=QPushButton('粘贴文本')
htmlCopyBtn=QPushButton('复制HTML')
htmlPasteBtn=QPushButton('粘贴HTML')
imageCopyBtn=QPushButton('复制图像')
imagePasteBtn = QPushButton('粘贴图像')
#多行文本
self.textLabel=QLabel('默认文本')
#标签用于展示图片
self.imageLabel=QLabel()
#self.imageLabel.setPixmap(QPixmap('../picture/LinuxLogo.jpg'))
#定义网格栅格布局
layout=QGridLayout()
layout.addWidget(textCopyBtn,0,0)
layout.addWidget(imageCopyBtn,0,1)
layout.addWidget(htmlCopyBtn,0,2)
layout.addWidget(textPasteBtn, 1, 0)
layout.addWidget(imagePasteBtn, 1, 1)
layout.addWidget(htmlPasteBtn, 1, 2)
layout.addWidget(self.textLabel,2,0,1,2)#坐标,行占的单位宽度,列占的单位宽度
layout.addWidget(self.imageLabel,2,2)
self.setLayout(layout)
#信号与槽
textCopyBtn.clicked.connect(self.copyText)
textPasteBtn.clicked.connect(self.pasteText)
htmlCopyBtn.clicked.connect(self.copyHtml)
htmlPasteBtn.clicked.connect(self.pasteHtml)
imageCopyBtn.clicked.connect(self.copyImage)
imagePasteBtn.clicked.connect(self.pasteImage)
self.setWindowTitle('剪贴板演示')
#槽函数
#bug解决: QApplication没有括号()
def copyText(self):
#剪贴板对象
clipboard=QApplication.clipboard()
clipboard.setText('hello world')
def pasteText(self):
clipboard=QApplication.clipboard()
self.textLabel.setText(clipboard.text())
def copyImage(self):
clipboard=QApplication.clipboard()
clipboard.setPixmap(QPixmap('../picture/LinuxLogo.jpg'))
#自己从文件夹里复制个图片就粘贴不了??????????????
def pasteImage(self):
clipboard=QApplication.clipboard()
#clipboard.pixmap()是从剪贴板获得图像
self.imageLabel.setPixmap(clipboard.pixmap())
def copyHtml(self):
mimeData=QMimeData() #获得数据类型???
mimeData.setHtml('<b>Bold and <font color=red>Red</font></b>')
clipboard=QApplication.clipboard()
clipboard.setMimeData(mimeData)
def pasteHtml(self):
clipboard=QApplication.clipboard()
mimeData=clipboard.mimeData() #获得剪贴板数据
#如果剪贴板数据是html 但是这里普通文本也可以。。。??????
if mimeData.hasHtml():
self.textLabel.setText(mimeData.html())
if __name__=='__main__':
app=QApplication(sys.argv)
main=ClipBoardDemo()
main.show()
sys.exit(app.exec_())
resultado de la operación:
Pruébelo usted mismo, el portapapeles es el portapapeles de su computadora, y pruébelo de acuerdo con las funciones implementadas.
Hay un error en el código de Windows, que se ha comentado en el código.
3. Control de calendario
Control de calendario:
QCalendarWidget
Código:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import QDate
class MyCalendar(QDialog):
def __init__(self):
super(MyCalendar, self).__init__()
self.initUI()
def initUI(self):
#日历
self.cal=QCalendarWidget(self)
#设置允许显示的最小日期
self.cal.setMinimumDate(QDate(1988,1,1))
# 设置允许显示的最大日期
self.cal.setMaximumDate(QDate(2088,1,1))
#以网格形式显示
self.cal.setGridVisible(True)
#移动位置
self.cal.move(20,20)
#标签
self.label=QLabel(self)
#获取当前日期
date=self.cal.selectedDate()
#格式化
self.label.setText(date.toString('yyyy-MM-dd dddd'))# mm不行
self.label.move(20,300)
#信号与槽
self.cal.clicked.connect(self.showDate)
self.setWindowTitle('日历演示')
self.resize(400,350)
def showDate(self,date):
#self.label.setText(date.toString('yyyy-MM-dd dddd'))
self.label.setText(self.cal.selectedDate().toString('yyyy-MM-dd dddd'))
if __name__=='__main__':
app=QApplication(sys.argv)
main=MyCalendar()
main.show()
sys.exit(app.exec_())
resultado de la operación:
Cuatro. Establecer diferentes estilos de fecha y hora
Control S:
QDateTimeEdit
Código:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class DateTimeEdit1(QWidget):
def __init__(self):
super(DateTimeEdit1, self).__init__()
self.initUI()
def initUI(self):
#垂直布局
vlayout=QVBoxLayout()
dateTimeEdit1=QDateTimeEdit()
dateTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTimeUtc())#传入当前时间
dateEdit=QDateTimeEdit(QDate.currentDate())#传入当前日期
timeEdit=QDateTimeEdit(QTime.currentTime())#传入当前日期
dateTimeEdit1.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
dateTimeEdit2.setDisplayFormat('yyyy/MM/dd HH:mm:ss')
dateEdit.setDisplayFormat('yyyy.MM.dd')
timeEdit.setDisplayFormat('HH:mm:ss')
vlayout.addWidget(dateTimeEdit1)
vlayout.addWidget(dateTimeEdit2)
vlayout.addWidget(dateEdit)
vlayout.addWidget(timeEdit)
self.setLayout(vlayout)
self.resize(300,90)
self.setWindowTitle('设置不同风格的日期和时间')
if __name__=='__main__':
app=QApplication(sys.argv)
main=DateTimeEdit1()
main.show()
sys.exit(app.exec_())
resultado de la operación:
5. Funcionamiento avanzado del control de fecha y hora
método | descripción |
---|---|
setDisplayFormat | Establecer el formato de hora de la fecha |
aaaa: representa el año, expresado por 4 como un número | |
MM: representa el mes, el rango de valores es 01-12 | |
dd: representa el día, el rango de valores es 01-31 | |
HH: representa la hora, el rango de valores es 00-23 | |
mm: representa el minuto, el rango de valores es 00-59 | |
ss: representa el segundo, el rango de valores es 00-59 | |
setMinimumDate () | Establecer la fecha mínima del control |
setMaximumDate () | Establecer la fecha máxima del control |
tiempo() | Volver a editar la hora |
fecha() | Devuelve la fecha de la edición |
Código:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class DateTimeEdit1(QWidget):
def __init__(self):
super(DateTimeEdit1, self).__init__()
self.initUI()
def initUI(self):
#垂直布局
vlayout=QVBoxLayout()
dateTimeEdit1=QDateTimeEdit()
#设置最小时间是当前时间往前倒推365天
dateTimeEdit1.setMinimumDate(QDate.currentDate().addDays(-365))
# 设置最大时间是当后时间往后推365天
dateTimeEdit1.setMaximumDate(QDate.currentDate().addDays(365))#bug: 第一个控件只能往上调一年,但不能往下调一年 ???
self.dateTimeEdit=dateTimeEdit1
dateTimeEdit2 = QDateTimeEdit(QDateTime.currentDateTimeUtc())#传入当前时间
#下拉是日历
dateTimeEdit2.setCalendarPopup(True)
dateEdit=QDateTimeEdit(QDate.currentDate())#传入当前日期
timeEdit=QDateTimeEdit(QTime.currentTime())#传入当前日期
dateTimeEdit1.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
dateTimeEdit2.setDisplayFormat('yyyy/MM/dd HH:mm:ss')
dateEdit.setDisplayFormat('yyyy.MM.dd')
timeEdit.setDisplayFormat('HH:mm:ss')
dateTimeEdit1.dateChanged.connect(self.onDateChange)
dateTimeEdit1.timeChanged.connect(self.onTimeChanged)
dateTimeEdit1.dateTimeChanged.connect(self.onDateTimeChanged)
self.btn=QPushButton('获取日期和时间')
self.btn.clicked.connect(self.onButtonClick)
vlayout.addWidget(dateTimeEdit1)
vlayout.addWidget(dateTimeEdit2)
vlayout.addWidget(dateEdit)
vlayout.addWidget(timeEdit)
vlayout.addWidget(self.btn)
self.setLayout(vlayout)
self.resize(300,90)
self.setWindowTitle('设置不同风格的日期和时间')
#日期变化(日期变化这个才触发)
def onDateChange(self,date):
print(date)
#时间变化(时间变化这个才触发)
def onTimeChanged(self,time):
print(time)
#日期和时间变化(日期或者时间变化这个都会触发)
def onDateTimeChanged(self,datetime):
print(datetime)
def onButtonClick(self):
#获得日期和时间
datetime=self.dateTimeEdit.dateTime()
print('当前设置日期:',datetime)
#最大日期
print('最大日期:',self.dateTimeEdit.maximumDate())
#最大日期和时间
print('最大日期和时间:',self.dateTimeEdit.maximumDateTime())
# 最小日期
print('最小日期:',self.dateTimeEdit.minimumDate())
# 最小日期和时间
print('最小日期和时间:',self.dateTimeEdit.minimumDateTime())
if __name__=='__main__':
app=QApplication(sys.argv)
main=DateTimeEdit1()
main.show()
sys.exit(app.exec_())
resultado de la operación:
Pruébelo usted mismo, hay errores en el código, que se han anotado y aún no se han resuelto. .