Last Updated on 2021-06-06 by Clay
正如標題所述,我們在使用 PyQt5 撰寫界面時,經常會需要不同於主視窗的另一個『子視窗』。可能是不同的功能、可能是主程式的設定......什麼都有可能。
而在 PyQt5 當中,從主視窗中開啟另外一個視窗,也並不是一件困難的事情。
以下,就用一個簡單的範例來紀錄該如何開啟子視窗吧!
開啟視窗
要完成另一個視窗其實非常簡單:只要撰寫另外一個視窗的程式即可。比如說我現在有一個主視窗:
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.resize(400, 300) # Button self.button = QPushButton(self) self.button.setGeometry(0, 0, 400, 300) self.button.setText('Main Window') self.button.setStyleSheet('font-size:40px') # Sub Window self.sub_window = SubWindow() # Button Event self.button.clicked.connect(self.sub_window.show)
同時我也有另外一個即將被開啟的子視窗:
class SubWindow(QWidget): def __init__(self): super(SubWindow, self).__init__() self.resize(400, 300) # Label self.label = QLabel(self) self.label.setGeometry(0, 0, 400, 300) self.label.setText('Sub Window') self.label.setAlignment(Qt.AlignCenter) self.label.setStyleSheet('font-size:40px')
然後我在點擊主視窗的按鈕時,會 show 出子視窗的視窗:
基本上就只是這樣而已。是不是相當簡單?
程式碼
這裡附上完整程式碼:
# -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.resize(400, 300) # Button self.button = QPushButton(self) self.button.setGeometry(0, 0, 400, 300) self.button.setText('Main Window') self.button.setStyleSheet('font-size:40px') # Sub Window self.sub_window = SubWindow() # Button Event self.button.clicked.connect(self.sub_window.show) class SubWindow(QWidget): def __init__(self): super(SubWindow, self).__init__() self.resize(400, 300) # Label self.label = QLabel(self) self.label.setGeometry(0, 0, 400, 300) self.label.setText('Sub Window') self.label.setAlignment(Qt.AlignCenter) self.label.setStyleSheet('font-size:40px') if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() sys.exit(app.exec_())