PyQt5 GUI程式設計(QMainWindow與QWidget模組結合使用)

余生没有余生發表於2024-04-03

一.簡介

QWidget是所有使用者介面物件的基類,而QMainWindow用於建立主應用程式視窗的類。它是QWidget的一個子類,提供了建立具有選單欄、工具欄、狀態列等的主視窗所需的功能。上篇主要介紹了基本使用,建立視窗時都是繼承單個模組,本章主要介紹下兩個模組的結合使用。

二.具體用法

1.我們先來建立一個類來繼承QMainWindow實現一個簡單的視窗

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow


class FileChooserApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 設定視窗的標題和大小
        self.setWindowTitle('檔案選擇器')
        self.setGeometry(300, 300, 500, 500)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileChooserApp()
    ex.show()
    sys.exit(app.exec_())

2.在主視窗中新增一個文字編輯器,使用垂直佈局來分佈展示

    def initUI(self):
        ql = QTextEdit()
        central_widget = QWidget()
        self.setCentralWidget(central_widget)  # 建立一箇中心部件
        vbox = QVBoxLayout(central_widget)  # 建立一個垂直佈局
        vbox.addWidget(ql)
        vbox.addStretch(1)
        central_widget.setLayout(vbox)  # 新增到佈局器中

上述中我們在主視窗中建立一箇中心部件將例項化後的central_widget 新增進去,這樣就可以設定我們想要的佈局了。

3.具體效果

三.例項

PyQt5 GUI程式設計(QMainWindow與QWidget模組結合使用)
import sys

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFileDialog, QMainWindow, QAction, QTextEdit


class FileChooserApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ql = QTextEdit()
        self.initUI()

    def initUI(self):
        action = QAction('開啟', self)  # 建立QAction例項
        action.setShortcut('Ctrl+a')  # 設定快捷鍵操
        action.triggered.connect(self.openFileNameDialog)
        menubar = self.menuBar()  # 建立一個選單欄
        menu_open = menubar.addMenu('檔案')  # 設定選單欄tab
        menu_open.addAction(action)  # 關聯事件

        action_updata = QAction('刪除', self)  # 建立QAction例項
        action_updata.setShortcut('Ctrl+d')  # 設定快捷鍵操
        action_updata.triggered.connect(self.text_del)

        action_a = QAction('儲存', self)  # 建立QAction例項
        action_a.triggered.connect(self.ctrl_s)

        menubar_updata = self.menuBar()  # 建立一個選單欄
        menu_updata = menubar_updata.addMenu('編輯')  # 設定選單欄tab
        menu_updata.addAction(action_updata)  # 關聯事件
        menu_updata.addAction(action_a)  # 關聯事件

        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        vbox = QVBoxLayout(central_widget)  # 建立一個垂直佈局
        vbox.addWidget(self.ql)
        vbox.addStretch(1)
        central_widget.setLayout(vbox)

        # 設定視窗的標題和大小
        self.setWindowTitle('檔案選擇器')
        self.setGeometry(300, 300, 500, 500)

    def ctrl_s(self):
        print(self.ql.toPlainText())
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self, "儲存檔案", "C://", "Text Files (*.txt)", options=options)
        if fileName:
            with open(fileName, 'w', encoding='utf8') as file:
                file.write(self.ql.toPlainText())

    def text_del(self):
        self.ql.clear()

    def openFileNameDialog(self):
        # 開啟檔案對話方塊並獲取檔案路徑  
        options = QFileDialog.Options()  # 初始化
        options |= QFileDialog.DontUseNativeDialog  # 使用pyqt對話方塊
        fileName, _ = QFileDialog.getOpenFileName(self, "對話方塊標題", "C://",
                                                  "All Files (*);;Text Files (*.txt);;Text Files (*.py)",
                                                  options=options)  # 開啟一個對話方塊
        """
        C://設定開啟的目錄,”“模式當前py目錄
        "All Files (*);;Text Files (*.txt);;Text Files (*.py)"  設定選擇檔案的型別
        """
        if fileName:
            with open(fileName, mode="r", encoding="utf8") as f:
                self.ql.setText(f.read())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileChooserApp()
    ex.show()
    sys.exit(app.exec_())
View Code

上述中建立了兩個選單欄,分別是開啟和編輯,內建功能是開啟txt檔案後讀取內容顯示在文字框中,文字框中內容可以進行清空和儲存。

相關文章