pyqt5 按钮 弹出 另外一个窗口

本文通过一个具体的PyQt5应用实例,展示了如何使用信号和槽机制来实现按钮触发事件,包括创建两个窗口之间的交互。代码详细解释了如何定义信号、连接信号到槽函数以及如何响应信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

# -*- coding: utf-8 -*-

import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton


class FirstWindow(QMainWindow):
    sig = pyqtSignal()

    def __init__(self, parent=None):
        super(FirstWindow, self).__init__(parent)
        self.tick_win = None
        self.btn = QPushButton(self)
        self.hide_btn = QPushButton(self)
        self.init_ui()

    def init_ui(self):

        self.resize(200, 200)
        self.setWindowTitle('FirstWindow')

        self.btn.setText('Emit')
        self.btn.setGeometry(30, 40, 60, 40)
        self.btn.clicked.connect(self.call_back_btn)
        self.sig.connect(self.call_back_sig)

        self.hide_btn.setText('hide')
        self.hide_btn.setGeometry(30, 120, 60, 40)

        self.hide_btn.clicked.connect(self.call_back_hide)

    def call_back_btn(self):
        self.sig.emit()

    def call_back_sig(self):

        if self.tick_win:
            print("++++++++++++++++++++++ call_back_sig first +++++++++++++++++++++")
            self.tick_win.show()
        else:
            self.tick_win = SecondWindow()
            self.tick_win.show()
            #self.tick_win.move(200, 200)
            print("--------------------- call_back_sig second ----------------")

    def call_back_hide(self):
        if self.tick_win:
            self.tick_win.hide()


class SecondWindow(QMainWindow):

    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)
        self.resize(200, 100)
        self.setWindowTitle('SecondWindow')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = FirstWindow()![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407112750351.gif)
    w.show()
    sys.exit(app.exec_())

效果:
在这里插入图片描述
那个拖动时我手动 拖动的
需要找到一个方法 把 弹出的 窗口 自动放到 刚才的窗口的旁边 ,而不是覆盖

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值