不使用信号和槽实现多窗口的交互20221026

多窗口交互,可以使用信号和槽来实现
不使用信号和槽来实现

子窗口类的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_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt多窗口信号是一种用于在多个窗口之间进行通信的机制。在Qt中,信号是一种事件驱动的通信机制,它允许一个对象(信号发射者)发出一个信号,而另一个对象(接收者)通过连接这个信号来触发相关操作。 在多窗口应用程序中,通常会有多个窗口对象存在。当某个窗口对象需要与其他窗口对象进行通信时,可以使用信号机制。通过定义信号,并通过连接两者,就可以在窗口之间传递和处理数据或事件。 首先,我们需要在发送信号的窗口对象中定义一个信号,在接收信号的窗口对象中定义一个函数。信号可以包含一些参数,以便将相关数据一起传递给函数。然后,在两个窗口对象之间建立连接,将信号连接到函数。当信号被触发时,函数将会执行相应的操作。 在连接信号时,可以使用`QObject::connect()`函数。这个函数需要传递发送信号的对象、信号的名称、接收信号的对象、函数的名称等参数。通常,可以在窗口对象的构造函数中进行信号的连接,以便在创建窗口对象时建立连接。 通过使用信号机制,我们可以实现窗口之间的通信,例如一个窗口发送一个信号通知其他窗口更新数据或进行操作。这使得多窗口应用程序更加灵活和交互性,方便了窗口之间的数据和事件的传递与处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Narutolxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值