Skip to content

[PyQt5] 在主視窗中開啟另外一個視窗

正如標題所述,我們在使用 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_())




References

Leave a Reply