气轻PyQt5 13 不同窗口间的槽机制
点击按钮后在新窗口中显示日历控件,在日历控件中选择日期后,新窗口关闭。通过槽机制将选择的日期显示在主窗口中的文本框里。
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont, QIcon, QPixmap
from PyQt5.QtCore import Qt, QDate, pyqtSignal
import sys
import datetime
class PyQt513(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('气轻PyQt5') # 设置窗口标题
self.resize(300, 60) # 设置窗口大小
dateData = datetime.datetime.now().date()
dateLabel = dateData.strftime('%Y-%m-%d')
self.edit = QLineEdit(self) # 输入框
self.edit.setGeometry(10, 0,230, 40) # 设置位置和大小
self.edit.setReadOnly(True) # 只读
self.edit.setText(dateLabel)
self.edit.setAlignment(Qt.AlignmentFlag.AlignHCenter)# 居中设置
self.edit.setStyleSheet('background-color:#FFE4B5;color : #32CD32; \
font: bold italic large /"Times New Roman/";font-size:25px')
self.btn = QPushButton('', self)
self.btn.setGeometry(250, 0, 40, 40)
self.btn.setIcon(QIcon(QPixmap('Date.png')))
self.btn.clicked.connect(self.calendarOn)
self.show()
def updateEdit(self,t):
self.edit.setText(t)
def calendarOn( self ):
self.calWin = CalendarWin(self.edit)
self.calWin.show()
self.calWin.move(900,700)
self.calWin.signal.connect(self.updateEdit) # 连接信号与槽
class CalendarWin(QWidget):
signal = pyqtSignal( str ) #定义一个信号
def __init__(self,t):
super().__init__()
self.t = t
self.setWindowTitle('日期')
self.resize(440, 220)
cal = QCalendarWidget(self)
cal.setGridVisible(True)
cal.resize(400,180)
cal.move(10,10)
cal.clicked[QDate].connect(self.emitDate) # 按下按钮时发送信号
def emitDate(self,date):
self.signal.emit(date.toString("yyyy-MM-dd"))
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PyQt513()
sys.exit(app.exec_())
执行结果
参照【气轻PyQt6 13】