第一次使用stackoverflow。我会尽量清楚地写下我的问题。
我正在创建第二个窗口(子窗口)的第一个窗口的父窗口。
当我从第一个窗口单击按钮时,我想打开第二个窗口。
在窗口中,我使用.parent()方法将文本发送回第一个窗口
我希望两个窗口都使用self.setWindowFlags(Qt.FramelessWindowHint)]是无框架的。
我的代码:
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。我会尽量清楚地写下我的问题。我正在创建第二个窗口(子窗口)的父窗口。当我从“第一个...”单击按钮时
为什么使用parent()从另一个窗口获取对象?我指出这一点是因为您将第二个窗口强制为第二个窗口的子级,并且具有诸如您看到的那样的次要后果。