對(duì)PyQt5基本窗口控件 QMainWindow的使用詳解
QMainWindow基本介紹
QMainWindow主窗口為用戶提供了一個(gè)應(yīng)用程序框架,它有自己的布局,可以在布局中添加控件。
窗口類型介紹
PyQt5中,主要使用以下三個(gè)類來(lái)創(chuàng)建窗口,可以直接使用,也可以繼承后再使用
QMainWindow
QWidget
QDialog
QMainWindow
QMainWindow可以包含菜單欄,工具欄,狀態(tài)欄,標(biāo)題欄等,是GUI程序的主窗口。
如果我們需要?jiǎng)?chuàng)建主窗口程序,就使用該類。
QDialog
QDialog是對(duì)話框窗口的基類,對(duì)話框一般用來(lái)執(zhí)行短期任務(wù),或者與用戶進(jìn)行互動(dòng),它可以是模態(tài)的也可以是非模態(tài)的。QDialog沒(méi)有菜單欄,工具欄,狀態(tài)欄等。
如果我們需要的是對(duì)話框,就選擇該類。
QWidget
該類作為QMainWindow和QWidget的父類,并未細(xì)化到主窗口或者對(duì)話框,作為通用窗口類,如果不確定具體使用哪種窗口類,就可以使用該類。
創(chuàng)建主窗口
如果一個(gè)窗口包含一個(gè)或者多個(gè)窗口,這個(gè)窗口就是父窗口,被包含的窗口就是子窗口。沒(méi)有父窗口的窗口就是頂層窗口,QMainWindow就是頂層窗口,它可以包含很多界面元素。
在OyQt中,在主窗口中會(huì)有一個(gè)控件(Widget)占位符來(lái)占著中心窗口,可以使用setCentralWidget()來(lái)設(shè)置中心窗口。
重要方法
方法 | 描述 |
---|---|
addToolBar() | 添加工具欄 |
centralWidget() | 返回窗口中心的控件,未設(shè)置返回NULL |
menuBar() | 返回主窗口的菜單欄 |
setCentralWidget() | 設(shè)置窗口中心的控件 |
setStatusBar() | 設(shè)置狀態(tài)欄 |
statusBar() | 獲取狀態(tài)欄對(duì)象 |
Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.
QMainWindow不能設(shè)置布局,因?yàn)樗凶约旱牟季?,不過(guò)中心窗口是可以使用布局的。
創(chuàng)建一個(gè)主窗口
# _*_ coding:utf-8 _*_ import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton) from PyQt5.QtGui import QIcon class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.init_ui() def init_ui(self): #設(shè)置窗口屬性 self.setGeometry(200, 200, 400, 200) self.setWindowTitle('創(chuàng)建主窗口') self.setWindowIcon(QIcon(r"E:\\1.jpg")) #設(shè)置狀態(tài)欄 self.status = self.statusBar() self.status.showMessage('我是狀態(tài)欄', 5000) if __name__ == "__main__": app = QApplication(sys.argv[1:]) window = MainWindow() window.show() sys.exit(app.exec_())
主窗口居中顯示
# _*_ coding:utf-8 _*_ import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QDesktopWidget) from PyQt5.QtGui import QIcon class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.init_ui() def init_ui(self): #設(shè)置窗口屬性 self.resize(400, 200) self.setWindowTitle('主窗口居中顯示') self.setWindowIcon(QIcon(r"E:\\1.jpg")) #設(shè)置狀態(tài)欄 self.status = self.statusBar() self.status.showMessage('我是狀態(tài)欄', 5000) #居中顯示處理 self.move_center() def move_center(self): screen = QDesktopWidget().screenGeometry() form = self.geometry() x_move_step = (screen.width() - form.width()) / 2 y_move_step = (screen.height() - form.height()) / 2 self.move(x_move_step, y_move_step) if __name__ == "__main__": app = QApplication(sys.argv[1:]) window = MainWindow() window.show() sys.exit(app.exec_())
screen = QDesktopWidget().screenGeometry()
獲取當(dāng)前屏幕的大小
self.geometry()
獲取窗口大小
關(guān)閉主窗口
# _*_ coding:utf-8 _*_ import sys from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton, QMainWindow) class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.init_ui() def init_ui(self): self.setWindowTitle('關(guān)閉主窗口') layout = QVBoxLayout() self.close_btn = QPushButton('關(guān)閉', self) layout.addWidget(self.close_btn) main_frame = QWidget() self.setCentralWidget(main_frame) main_frame.setLayout(layout) self.close_btn.clicked.connect(self.on_button_click) def on_button_click(self): #將信息顯示在狀態(tài)欄中 sender = self.sender() msg = sender.text() + " 被按下了" status = self.statusBar() status.showMessage(msg, 5000) #程序退出 app = QApplication.instance() app.quit() if __name__ == "__main__": app = QApplication(sys.argv[1:]) window = MainWindow() window.show() sys.exit(app.exec_())
self.close_btn.clicked.connect(self.on_button_click)
PyQt中控件之間通信使用信號(hào)(Signal)和槽(slot)機(jī)制。
定義的方式為 控件.消息.connect(槽)
上例中,就是將button的clicked信號(hào)跟槽on_button_click進(jìn)行了綁定。
以上這篇對(duì)PyQt5基本窗口控件 QMainWindow的使用詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù)
今天小編就為大家分享一篇python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12詳盡講述用Python的Django框架測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的教程
這篇文章主要介紹了詳盡講述用Python的Django框架測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的教程,主要使用TDD工具,全文介紹非常詳細(xì),需要的朋友可以參考下2015-04-04嘗試使用Python多線程抓取代理服務(wù)器IP地址的示例
這篇文章主要介紹了嘗試使用Python多線程抓取代理服務(wù)器IP地址的示例,盡管有GIL的存在使得Python并不能真正實(shí)現(xiàn)多線程并行,需要的朋友可以參考下2015-11-11Python redis操作實(shí)例分析【連接、管道、發(fā)布和訂閱等】
這篇文章主要介紹了Python redis操作,結(jié)合實(shí)例形式分析了Python redis的連接、管道、發(fā)布和訂閱等相關(guān)概念、原理及操作技巧,需要的朋友可以參考下2019-05-05Python使用Yagmail庫(kù)實(shí)現(xiàn)自動(dòng)化郵件營(yíng)銷
在數(shù)字營(yíng)銷領(lǐng)域,自動(dòng)化郵件營(yíng)銷是一種高效、低成本的方式,能夠幫助企業(yè)與客戶保持溝通,提升品牌忠誠(chéng)度,而Yagmail是一個(gè)簡(jiǎn)潔且功能強(qiáng)大的Python庫(kù),可以大大簡(jiǎn)化郵件發(fā)送的過(guò)程,本文將詳細(xì)介紹如何使用Yagmail庫(kù)來(lái)實(shí)現(xiàn)自動(dòng)化郵件營(yíng)銷,需要的朋友可以參考下2024-12-12Django中ORM表的創(chuàng)建和增刪改查方法示例
這篇文章主要給大家介紹了關(guān)于Django中ORM表的創(chuàng)建和增刪改查等基本操作的方法,還給大家分享了django orm常用查詢篩選的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11