PyQt5 Learning Journal:Day2
主窗口类型
QMainWindow:可包含菜单栏、工具栏、状态栏、标题栏
QDialog:是对话窗口的基类,没有菜单栏、工具栏、状态栏
QWidget:不确定窗口用途时可使用
简单示例:主窗口应用——状态栏显示一行文字,停留5s
# 使用sys里获取参数的API
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
# 添加图标
from PyQt5.QtGui import QIcon
# 面向对象编程__创建类__继承QMainWindow类——父类
class FirstMainWin(QMainWindow):
# 方法初始化parent=None保证QMainWindow是主窗口
def __init__(self, parent=None):
# 子类重写init构造函数时,可以使用super调用父类的init方法
super().__init__(parent)
# 设置主窗口的标题
self.setWindowTitle('第一个主窗口应用')
# 设置窗口尺寸
self.resize(520, 280)
# 获得当前状态栏
self.status = self.statusBar()
# 在当前状态栏上显示信息,停留5000ms
self.status.showMessage('只存在5s的消息',5000)
if __name__ == '__main__':
app = QApplication(sys.argv)
# 设置应用图标
app.setWindowIcon(QIcon('C:/Users/dell/PycharmProjects/desk/images/people.ico'))
main = FirstMainWin()
main.show()
sys.exit(app.exec_())
主窗口居中显示
# 获取屏幕坐标系
screen = QDesktopWidget().screenGeometry()
# 获取窗口坐标系
size = self.geometry()
newLeft = (screen.width() - size.width()) / 2
newTop = (screen.height() - size.height()) / 2
self.move(newLeft, newTop)
退出应用程序:点击PushButton退出程序
按钮单击事件的方法——自定义的槽
def onClick_Button(self):
# 通过sender获得事件的对象
sender = self.sender()
# 控制台显示‘按钮上文字+按钮被按下’
print(sender.text() + '按钮被按下')
# 获取app单例对象——当前app对象
application = QApplication.instance()
# 退出应用程序
application.quit()
关键:将信号与槽关联
def __init__(self):
super().__init__()
self.resize(300, 120)
self.setWindowTitle('退出应用程序')
# 添加一个button
self.button1 = QPushButton('退出应用程序')
# 将信号与槽关联——点击退出
self.button1.clicked.connect(self.onClick_Button)
# 创建水平布局
layout = QHBoxLayout()
layout.addWidget(self.button1)
# 创建所有控件的根——组合框架
mainFrame = QWidget()
mainFrame.setLayout(layout)
# 组合框架放在窗口中央
self.setCentralWidget(mainFrame)
屏幕坐标系
方法一:坐标原点为标题栏左上角
widget.x() # 250(窗口横坐标)
widget.y() # 200(窗口纵坐标)
widget.width() # 300(工作区域宽度)
widget.height() # 240(工作区域高度)
方法二:坐标原点为工作区域左上角
widget.geometry().x() # 259
widget.geometry().y() # 238
widget.geometry().width() # 300
widget.geometry().height() # 240
方法三:坐标原点为标题栏左上角,宽度width高度height均包含边框
widget.frameGeometry().x() # 250
widget.frameGeometry().y() # 200
widget.frameGeometry().width() # 318
widget.frameGeometry().height() # 287
设置窗口大小
self.setGeometry(300, 300, 400, 200)
设置应用程序图标
self.setWindowIcon(QIcon('文件路径/xxx.ico'))