先介绍一下,几种常见的窗口类型
1.QMainWindow窗口可以包含菜单栏,工具栏,状态栏,标题栏等,是最常见的窗口形式,是GUI程序的主窗口
2.QDialog是对话框窗口的基类。对话框主要用来执行短期任务,实现与用户的互动。没有菜单栏,工具栏,状态栏等。
3.QWidget,算是上述两种的折中,即如果是主窗口,就用QMainWindow,对话框就用QDialog;如果不确定,或者有可能作为顶层窗口,也有可能嵌入其他窗口中,那么就用QWidget.
创建主窗口并添加一个状态栏
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QIcon
class MainW(QMainWindow):
def __init__(self,parent=None):
super(MainW,self).__init__(parent)
self.resize(400,200)
#创建状态栏
self.status=self.statusBar()
#将提示信息显示在状态栏中,并设置显示时间
self.status.showMessage("状态栏提示",5000)
self.setWindowTitle("MainWindow例子")
if __name__=="__main__":
app=QApplication(sys.argv)
#导入图像,并作为窗口图标
app.setWindowIcon(QIcon("./cartoon1.ico"))
form=MainW()
form.show()
sys.exit(app.exec_())
上述的窗口类MainW,继承了主窗口QMainWindow类的所有属性和方法,然后使用父类QMainWindow的构造函数初始化窗口,在设置窗口标题,最后通过消息循环显示窗口
主窗口居中显示
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication,QDesktopWidget
from PyQt5.QtGui import QIcon
class MainW(QMainWindow):
def __init__(self,parent=None):
super(MainW,self).__init__(parent)
self.resize(400,200)
self.status=self.statusBar()
self.status.showMessage("状态栏提示",5000)
self.setWindowTitle("MainWindow例子")
self.center()
def center(self):
#计算显示屏幕的大小
screen=QDesktopWidget().screenGeometry()
#获取QWidget窗口的大小
size=self.geometry()
#将窗口移至屏幕中央
self.move((screen.width() - size.width())/2, (screen.height()-size.height())/2)
if __name__=="__main__":
app=QApplication(sys.argv)
app.setWindowIcon(QIcon("./cartoon1.ico"))
form=MainW()
form.show()
sys.exit(app.exec_())
注意这里,描述显示屏幕的类即QDesktopWidget的使用
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication,QHBoxLayout,QPushButton,QWidget
from PyQt5.QtGui import QIcon
class MainW(QMainWindow):
def __init__(self,parent=None):
super(MainW,self).__init__(parent)
self.resize(400,200)
self.status=self.statusBar()
self.status.showMessage("状态栏提示",5000)
self.setWindowTitle("MainWindow例子")
self.button1=QPushButton('关闭主窗口')
#x信号槽
self.button1.clicked.connect(self.onButtonClick)
#控件水平布局
layout=QHBoxLayout()
#向布局中添加控件
layout.addWidget(self.button1)
main_frame=QWidget()
main_frame.setLayout(layout)
#设置中心窗口
self.setCentralWidget(main_frame)
def onButtonClick(self):
#获取事件
sender=self.sender()
print(sender.text())
#QApplication对象的指针
QApp=QApplication.instance()
QApp.quit()
if __name__=="__main__":
app=QApplication(sys.argv)
app.setWindowIcon(QIcon("./cartoon1.ico"))
form=MainW()
form.show()
sys.exit(app.exec_())