Qt5中窗口类型分为三类 QMainWindow、QWidget、QDialog。
- QMainWindow:继承自QWidget,窗口包含菜单栏、工具栏、状态栏、标题栏等,是GUI主窗口。不能设置布局。
addToolBar() | 添加工具栏 |
centralWidget() | 返回窗口中心的一个控件,未设置时返回NULL |
menuBar() | 返回主窗口菜单栏 |
setCentralWidget() | 设置窗口中心控件 |
statusBar() | 获得状态栏对象,调用状态栏对象showMessage(msg,timeout)在状态栏显示消息。 参数一为显示的消息内容,参数二为显示几秒,单位为毫秒,默认0,表示一直显示该消息 |
案例1:在主窗口创建一个状态栏
# -*- coding: utf-8 -*-
import sys
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()
#将信息显示在状态栏,显示时间为5秒,之后消失
self.status.showMessage("状态栏",5000)
self.setWindowTitle("pyqt QMainWindow test")
if __name__=="__main__":
app=QApplication(sys.argv)
app.setWindowIcon(QIcon("./images/cartoon1.ico"))
form=MainWindow()
form.show()
sys.exit(app.exec_())
案例二:将主窗口放在屏幕中间显示,并点击按钮关闭窗口
#将主窗口放在屏幕中间显示,并点击按钮关闭窗口
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QDesktopWidget,QApplication,QMainWindow,QPushButton,QHBoxLayout,QWidget
import sys
class WinForm(QMainWindow):
def __init__(self,parent=None):
super(WinForm,self).__init__(parent)
self.setWindowTitle("主窗口放在屏幕中间显示")
self.resize(370,250)
self.center()
#添加一个button
self.button1=QPushButton("按钮")
#添加一个按钮的点击的信号与槽事件,在槽函数中获取QApplication类对象,
#调用quit关闭窗口
self.button1.clicked.connect(self.onButtonClick)
layout=QHBoxLayout()
layout.addWidget(self.button1)
main_frame=QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def center(self):
#计算屏幕大小
screen=QDesktopWidget().screenGeometry()
#获得窗口大小
size=self.geometry()
self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
def onButtonClick(self):
#获取发送对象--按钮控件
sender=self.sender()
print(sender.text()+"被按下")
qApp=QApplication.instance()
qApp.quit()
if __name__=="__main__":
app=QApplication(sys.argv)
win=WinForm()
win.show()
sys.exit(app.exec_())
- QWidget: 适用于窗口类型暂不确定,或作为顶层窗口,或嵌入其他窗口中。是所有用户界面对象的基类。
- QDialog:对话框基类,用来执行短期任务,或者与用户互动,显示方式分为模态、非模态。无菜单栏、工具栏、状态栏。
x() y() | 获得窗口左上角的坐标 |
width() height() | 获得客户区的宽度和高度 |
QWdiget提供的geometry()对象的函数x() y() | 获取客户去左上角的坐标, |
QWdiget提供的geometry()对象的函数width() height() | 获得客户区的宽度与高度 |
QWdiget提供的frameGeometry()对象的函数x() y() | 获得窗口左上角坐标 |
QWdiget提供的frameGeometry()对象的函数width() height() | 获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度 |
QWidget在边界客户区需要注意的地方:
- QWidget不包含边框的常用函数
不包含边框的部分是客户区,用户可以操作的地方,添加子控件。其位置是指在屏幕上的位置,在Qt中保存和使用的时QRect类。该类有自己的大小和位置
- 改变客户去面积:
QWidget.resize(width,height)
QWidget.resize(QSize)
- 获得客户区大小:QWidget.size()
- 获得客户去的宽度和高度:
QWidget.width()
QWidget.height()
获得客户去的宽度和高度
QWidget.width()
QWidget.height()
设置客户去的宽度和高度
QWidget.setFixedWidth(int width) 高度不变
QWidget.setFixedHeight(int height) 宽度不变
宽高都固定,不可以通过鼠标改变窗口宽高
QWidget.setFixedSize(QSize size)
QWidget.setFixedSize(int width,int height)
改变客户区大小
Qwidget.setGeometry(int x,int y,int width,int height)
QWidget.setGeometry(QRect rect)
包含边框的常用函数
- 获得窗口大小和位置 QWidget.frameGeometry()
- 设置窗口位置
QWidget.move(int x,int y)
QWidget.move(QPoint point)
获得窗口左上角坐标 QWidget.pos()
案例一:屏幕坐标系统显示
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication,QPushButton,QWidget
import sys
app=QApplication(sys.argv)
widget=QWidget()
btn=QPushButton(widget)
btn.setText("Button")
#以QWidget左上角为(0,0)点
btn.move(20,20)
#不通的操作系统对窗口的最小宽度有规定,若设置宽度小于规定值,则会以规定值进行显示
widget.resize(300,200)
#以屏幕左上角为远点
widget.move(250,200)
widget.setWindowTitle("pyqt坐标系统")
widget.show()
print("w.x()=%d" % widget.x())
print("w.y()=%d" % widget.y())
print("w.width()=%d" % widget.width())
print("w.height()=%d" % widget.height())
print("QWidget.geometry")
print("w.geometry().x()=%d" % widget.geometry().x())
print("w.geometry().y()=%d" % widget.geometry().y())
print("w.geometry().width()=%d" % widget.geometry().width())
print("w.geometry().height()=%d" % widget.geometry().height())
sys.exit(app.exec_())