首頁>技術>

QMainWindow, QWidget, QDialog三個類都是用來建立視窗的,可以直接使用或繼承後再使用。QMainWindow視窗可以包含選單欄、工具欄、狀態列、標題欄等,是最常見的視窗形式,也是GUI程式的主視窗。QDialog是對話方塊視窗的基類。對話方塊主要用來執行短期任務,或者與使用者互動,它可以是模態的,也可以是非模態的。QDialog視窗沒有選單欄、工具欄、狀態列等。

如果是主視窗,就用QMainWindow類。如果是對話方塊,就用QDialog類。如果不確定,或者有可能是頂層視窗,也有可能嵌入到其它視窗中,那就用QWidget類。

建立主視窗

如果一個視窗包含一個或多個視窗,那麼這個視窗就是父視窗,被包含的視窗就是子視窗。沒有父視窗的視窗就是頂層視窗。QMainWindow就是一個頂層視窗。QMainWindow類中比較重要的方法,如下:

addToolBar() : 新增工具欄

centralWidget() : 返回視窗中心的一個控制元件,未設定時返回NULL

menuBar() : 返回主視窗的選單欄

setCentralWidget() : 設定視窗中心的控制元件

setStatusBar() : 設定狀態列

statusBar() : 獲取狀態列物件後,呼叫狀態列物件的showMessage(message, int timeout = 0)方法,顯示狀態列資訊。其中第一個引數是顯示的狀態列資訊;第二個引數是資訊停留的時間,單位是毫秒,預設是0, 表示一直顯示狀態列資訊

在開發GUI中,用Qt Designer雖然很方便,但是過於依賴,會導致很難理解QT的一些實現方法,我個人還是喜歡自己碼程式碼。

例項一

建立一個簡單的視窗:

import sys from PyQt5.QtWidgets import QMainWindow, QApplicationclass MainWindow(QMainWindow):\t\tdef __init__(self, parent=None):  \t\tsuper(MainWindow, self).__init__(parent) \t\t\t\tself.resize(400, 200) \t\t\t\tself.status = self.statusBar() \t\t\t\tself.status.showMessage("這是一個狀態列", 5000) \t\t\t\tself.setWindowTitle("主視窗例項")if __name__ == "__main__": \t\tapp = QApplication(sys.argv) \t\tform = MainWindow() \t\tform.show() \t\tsys.exit(app.exec_())

效果圖:

例項二

import sys from PyQt5.QtWidgets import QMainWindow,QApplication,QPushButton,QHBoxLayout,QWidget,QDesktopWidget class MainWindow(QMainWindow): \t\tdef __init__(self,parent=None):  \t\tsuper(MainWindow, self).__init__(parent) \t\t\t\t#窗體設定  self.resize(300, 200) \t\t\t\tself.setWindowTitle("關閉視窗") \t\t\t\tself.center() \t\t\t\t#按鈕設定  self.btn = QPushButton("關閉") \t\t\t\tself.btn.clicked.connect(self.onBtnClickCloseWin) #單擊事件   #佈局  layout = QHBoxLayout()\t\t\t\tlayout.addWidget(self.btn) \t\t\t\twidGet=QWidget() widGet.setLayout(layout) \t\t\t\tself.setCentralWidget(widGet) \t\t\t\t#窗體居中  def center(self):  \t\tself.size=QDesktopWidget().screenGeometry() \t\t\t\tself.resize=self.geometry() \t\t\t\tself.move((self.size.width()-self.resize.width())/2,(self.size.height()-self.resize.height())/2) \t\tdef onBtnClickCloseWin(self):  \t\t#傳送訊息物件 sender=self.sender()\t\t\t\tprint( sender.text() + ' 被按下了' ) \t\t\t\tappInstance=QApplication.instance() \t\t\t\tappInstance.quit()if __name__=="__main__": \t\tapp=QApplication(sys.argv) \t\tmainWindow=MainWindow() \t\tmainWindow.show() \t\tsys.exit(app.exec_())

效果圖:

完結,後續持續更新PyQt5的相關內容.

283

Qt

Python

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Data Science的開發環境搭建