多窗口交互,可以使用信号和槽来实现
不使用信号和槽来实现
子窗口类的Python代码
DateDialog.py
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
class DateDialog(QDialog):
def __init__(self,parent=None):
super(DateDialog, self).__init__(parent)
self.setWindowTitle("DateDialog")
print('DateDialog')
layout = QVBoxLayout(self)
#self.datetime = QDateTimeEdit(self)
self.itmes_datetime = QDateTimeEdit(self)
self.itmes_datetime.setDisplayFormat('yyyy-MM-dd')
# 设置弹窗风格
self.itmes_datetime.setCalendarPopup(True)
print('232323')
# 设置显示当前日期 控件的名称一定要对,否则程序崩溃
#self.itmes_datetime.setDateTime(QtDateTime.currentDateTime())
self.itmes_datetime.setDateTime(QDateTime.currentDateTime())
print('343434')
layout.addWidget(self.itmes_datetime)
print('898989')
#
# # 按钮盒子
choose_btn = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self)
choose_btn.accepted.connect(self.accept)
choose_btn.rejected.connect(self.reject)
layout.addWidget(choose_btn)
print('00000')
#def dataTime(self):
def _dataTime(self):
print('_dataTime')
#return self.itmes_datetime.datetime() # 大小写错误
return self.itmes_datetime.dateTime()
@staticmethod
def getDateTime(parent=None):
print('getDateTime')
dialog = DateDialog(parent)
result = dialog.exec_()
date = dialog._dataTime()
return date.date(), date.time(), result == QDialog.Accepted
if __name__ == '__main__':
app = QApplication(sys.argv)
main = DateDialog()
main.show()
sys.exit(app.exec_())
主窗口类的代码main.py
'''
多窗口交互,可以使用信号和槽来实现
不使用信号和槽来实现
'''
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from DateDialog import DateDialog
class MultWindow(QWidget):
def __init__(self):
super(MultWindow, self).__init__()
self.setWindowTitle('多窗口交互,不使用信号与槽')
self.lineEdit = QLineEdit(self)
self.btn1 = QPushButton('弹出对话框1')
self.btn1.clicked.connect(self.onBtn1Click)
self.btn2 = QPushButton('弹出对话框2')
self.btn2.clicked.connect(self.onBtn2Click)
# 用网格布局
gridLayout = QGridLayout()
gridLayout.addWidget(self.lineEdit)
gridLayout.addWidget(self.btn1)
gridLayout.addWidget(self.btn2)
self.setLayout(gridLayout)
# 方式1 直接访问控件
def onBtn1Click(self):
print("onBtn1Click")
dialog = DateDialog(self)
result = dialog.exec_()
date = dialog._dataTime() # 大小写错误
print(date)
print(type(date))
buff = date.toString()
if result == QDialog.Accepted:
buff += '点击了确认'
else:
buff += '点击了取消'
self.lineEdit.setText(buff)
# 方式2 通过静态函数访问控件
def onBtn2Click(self):
print("onBtn2Click")
date, time, result = DateDialog.getDateTime()
self.lineEdit.setText(date.toString())
if result == QDialog.Accepted:
print('点击确认按钮')
else:
print('点击取消按钮')
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MultWindow()
main.show()
sys.exit(app.exec_())