子窗口是主窗口中的一個獨立視窗,可以用來顯示額外的資料,或者在子窗口增加功能,與主窗口互動。
show()
: 打開窗口。
close()
: 關閉窗口。會完全被銷毀,不占用內存和資源。
hide()
: 隱藏窗口。將窗口隱藏,不會被銷毀,但會占用內存和資源。
範例 : 在主窗口調用子窗口時,必須使用 self
避免子窗口被回收。以下面範例是用按鈕控制子窗口開啟、關閉和隱藏。
class SubWindow(QWidget):
def __init__(self):
super().__init__()
self.lb = QLabel("這是子窗口")
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.setLayout(self.layout)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
#創建子窗口
self.lb = QLabel("打開子窗口")
self.SubWindow = SubWindow()
self.Openbtn = QPushButton("開啟子窗口")
self.Openbtn.clicked.connect(lambda: self.SubWindow.show())
self.Closebtn = QPushButton("關閉子出口")
self.Closebtn.clicked.connect(lambda: self.SubWindow.close())
self.Hidebtn = QPushButton("隱藏子出口")
self.Hidebtn.clicked.connect(lambda: self.SubWindow.hide())
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.layout.addWidget(self.Openbtn)
self.layout.addWidget(self.Closebtn)
self.layout.addWidget(self.Hidebtn)
self.setLayout(self.layout)
QLineEdit
的內容會被傳遞到子窗口的標籤上,實現數據的傳遞。from PySide6.QtWidgets import QApplication , QWidget , QPushButton , QLabel , QVBoxLayout , QLineEdit
class MainWindow(QWidget):
def __init__(self):
super().__init__()
#開啟子窗口
self.SubWindow = SubWindow(self)
self.SubWindow.show()
# 設定元件
self.LineEdit = QLineEdit()
self.btn = QPushButton("按我傳遞數據")
self.btn.clicked.connect(lambda: self.SubWindow.lb2.setText(self.LineEdit.text()))
self.layout = QVBoxLayout()
self.layout.addWidget(self.LineEdit)
self.layout.addWidget(self.btn)
self.setLayout(self.layout)
class SubWindow(QWidget):
def __init__(self,parent):
super().__init__()
self.lb = QLabel("這是子窗口")
self.lb2 = QLabel("空")
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.layout.addWidget(self.lb2)
self.setLayout(self.layout)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
from PySide6.QtWidgets import QApplication , QWidget , QPushButton , QLabel , QVBoxLayout , QLineEdit
class MainWindow(QWidget):
def __init__(self):
super().__init__()
#開啟子窗口
self.SubWindow = SubWindow(self)
self.SubWindow.show()
# 設定元件
self.lb = QLabel("空的")
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.setLayout(self.layout)
class SubWindow(QWidget):
def __init__(self,parent):
super().__init__()
self.lb = QLabel("這是子窗口")
self.LineEdit = QLineEdit()
self.btn = QPushButton("按我傳遞數據")
self.btn.clicked.connect(lambda: parent.lb.setText(self.LineEdit.text()))
self.layout = QVBoxLayout()
self.layout.addWidget(self.lb)
self.layout.addWidget(self.LineEdit)
self.layout.addWidget(self.btn)
self.setLayout(self.layout)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
功能 | 方法 |
---|---|
打開窗口 | show() |
關閉窗口 | close() |
隱藏窗口 | hide() |