1.QMainWindow
QMainWindow 是应用程序框架 有自己的布局 也可以在布局中添加控件 比如工具栏菜单栏 状态栏等添加到布局管理器中
1.1窗口类型介绍
QMainWindow QWidget QDialog 这三个类都是用来创建窗口的 可以直接使用,也可以继承后再使用 QMainWindow 可以包含菜单栏 工具栏 状态栏 标题栏等 是最常见的窗口形式 QDialog 是对话窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的 也可以是非模态的,QDialog 没有菜单栏 工具栏 状态栏等等 使用方面: 如果是主窗口 就是用QMainWindow 如果是对话窗,就使用QDialog类 如果不确定或者可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类
1.2创建主窗口
如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口就是子窗口。没有父窗口的窗口就是顶层窗口,QMainWindow就是一个顶层窗口,它可以包含很多界面元素。 在PyQt中 在主窗口 中会有一个空间占位符来占着中心窗口 可以使用setCentralWidget()来设置中心窗口
QMainWindow 继承自QWidget类 拥有它的所有派生方法和属性
其中比较重要的方法如
+ addToolBar() 添加工具栏
+ centralWidget() 返回窗口中心的一个控件 未设置时返回null
+ menuBar() 返回主窗口的菜单栏
+ setCentralWidget() 设置窗口中心控件
+ setStatusBar() 设置状态栏
+ statusBar() 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout=0)方法,显示状态栏信息你。其中第一个参数要显示的信息 第二个参数时信息停留的时间 单位是毫秒默认是0 表示一直显示状态栏信息。
from PyQt5.QtWidgets import QMainWindow,QApplication from PyQt5.QtGui import QIcon class MainWindow(QMainWindow): def __init__(self,parent=None): super(MainWindow,self).__init__(parent) self.resize(400,200) self.status = self.statusBar() self.status.showMessage("这个时状态栏的显示时间是5000",5000) self.setWindowTitle("PyQt MainWindow例子") if __name__ == "__main__": import sys app = QApplication(sys.argv) app.setWindowIcon(QIcon("./images/b822566318.ico")) mywin = MainWindow() mywin.show() sys.exit(app.exec_())
下面是窗口放在桌面中心的位置
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget import sys class winform(QMainWindow): def __init__(self,parent=None): super(winform,self).__init__(parent) self.setWindowTitle("主窗口放在屏幕中间例子") self.resize(270,270) self.center() def center(self): screen = QDesktopWidget().screenGeometry() #获取屏幕的大小 size = self.geometry()#获取窗口的大小 self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)#移动到指定位置 if __name__ == "__main__": app = QApplication(sys.argv) win = winform() win.show() sys.exit(app.exec_())
下面是关闭装主窗口的例子
from PyQt5.QtWidgets import QMainWindow,QApplication,QWidget,QHBoxLayout,QPushButton import sys class WinForm(QMainWindow): def __init__(self,parent=None): super(WinForm,self).__init__(parent) self.setWindowTitle("关闭主窗口的例子") self.button = QPushButton("关闭窗口按钮") self.button.clicked.connect(self.onButtonClick) layout = QHBoxLayout() layout.addWidget(self.button) main_frame = QWidget() main_frame.setLayout(layout) self.setCentralWidget(main_frame) def onButtonClick(self): sender = self.sender()#发送信号的对象 print(sender.text()+"被按下了") qApp = QApplication.instance() qApp.quit() if __name__ == "__main__": app = QApplication(sys.argv) form = WinForm() form.show() sys.exit(app.exec_())
2 QWidget
基础窗口控件QWidget类是所有用户界面对象的积累,所有的窗口和空间都直接或间接继承自QWidget类 窗口控件(Widget 简称控件)是在PyQt中建立界面的主要元素。在PyQt中没有嵌入到其他控件中的控件为窗口一般窗口都有边框 标题栏。窗口是指程序的整体界面,可以包含标题栏 菜单栏 工具栏 关闭按钮 最小化按钮 最大化按钮等;控件是指按钮 复选框 文本框 表格 进度条等这些组成的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。
2.1窗口坐标系统
PyQt使用同一的坐标系统来定位窗口控件的位置和大小。如下图所示。