Pyqt5到父母和孩子的无框窗口

问题描述 投票:0回答:1

第一次使用stackoverflow。我会尽量清楚地写下我的问题。

  1. 我正在创建第二个窗口(子窗口)的第一个窗口的父窗口。

  2. 当我从第一个窗口单击按钮时,我想打开第二个窗口。

  3. 在窗口中,我使用.parent()方法将文本发送回第一个窗口

  4. 我希望两个窗口都使用self.setWindowFlags(Qt.FramelessWindowHint)]是无框架的。

  5. 我的代码:

from PyQt5.QtWidgets import QDialog, QApplication, QLineEdit, QPushButton
from PyQt5.QtCore import Qt, QRect
import sys

class FirstWindow(QDialog):
    def __init__(self, parent=None):

        super(FirstWindow, self).__init__(parent)

        self.setWindowFlags(Qt.FramelessWindowHint)

        self.setFixedSize(400,400)

        self.go_to_second_window = SecondWindow(self)

        ######################################################

        self.button_go_second_window = QPushButton(self)

        self.button_go_second_window.setGeometry(QRect(40,150,220,50))
        self.button_go_second_window.setStyleSheet("QPushButton { background-color: rgba(63, 142, 191, 255); color : rgba(242, 242, 242, 255) }")

        self.button_go_second_window.clicked.connect(self.go_second_window)  

        ###################################################### 

        self.show()

    def go_second_window (self):

        self.go_to_second_window.show()


class SecondWindow(QDialog):

    def __init__(self, parent):

        super(SecondWindow, self).__init__(parent)

        #self.setWindowFlags(Qt.FramelessWindowHint)

        self.setFixedSize(400,400)

        ######################################################
        self.field = QLineEdit(self)
        self.field.move(40,100)
        ######################################################

        self.button_send_data_back = QPushButton(self)
        self.button_send_data_back.setText("Send")
        self.button_send_data_back.setGeometry(QRect(40,150,220,50))
        self.button_send_data_back.setStyleSheet("QPushButton { background-color: rgba(63, 142, 191, 255); color : rgba(242, 242, 242, 255) }")

        self.button_send_data_back.clicked.connect(self.send_data_back)  



    def send_data_back (self):

        go_to_first_window = FirstWindow(self)
        self.parent().button_go_second_window.setText(self.field.text())
        self.field.setText("")

        go_to_first_window.show() 

        self.close()


if __name__ == "__main__" :
    App = QApplication (sys.argv)
    window = FirstWindow()
    sys.exit(App.exec())

我的问题:

这完全符合我的预期。问题是第二个窗口不是无框的。

如果我在第二个窗口初始化中取消注释#self.setWindowFlags(Qt.FramelessWindowHint),它将无法正常工作。

如果取消注释并将super(SecondWindow, self).__init__(parent)设置为super(SecondWindow, self).__init__(parent=None),我将使两个窗口无框架并按预期工作,但由于.parent()方法获胜,我将无法将数据发送回第一个窗口找不到父母。

第一次使用stackoverflow。我会尽量清楚地写下我的问题。我正在创建第二个窗口(子窗口)的父窗口。当我从“第一个...”单击按钮时

python pyqt pyqt5
1个回答
0
投票

为什么使用parent()从另一个窗口获取对象?我指出这一点是因为您将第二个窗口强制为第二个窗口的子级,并且具有诸如您看到的那样的次要后果。

© www.soinside.com 2019 - 2024. All rights reserved.