一.簡介
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.具體效果
三.例項
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_())
上述中建立了兩個選單欄,分別是開啟和編輯,內建功能是開啟txt檔案後讀取內容顯示在文字框中,文字框中內容可以進行清空和儲存。