pyqt5入门实例

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
#这里我们进行了一些必要模块的导入。最基础的widget组件位于PyQt5.QtWidget模块中
from PyQt5.QtWidgets import (QApplication, QWidget, QToolTip, QAction, qApp, 
QPushButton, QMessageBox, QDesktopWidget, QMainWindow, QTextEdit, QGridLayout)
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import QCoreApplication # 引入QtCore的对象模块


# 新窗口
class SecondWindow(QWidget):
    def __init__(self):
        super(SecondWindow, self).__init__()
        self.resize(200, 200)
        self.setStyleSheet("background: black") # 背景色改为黑色


#类
class Example(QMainWindow): #QWidget,QMainWindow


    def __init__(self):
        '''
    在面向对象编程中有三个重要的东西,分别是类,数据和方法。
    这里我们创建了一个新类叫做Example。Example类继承自QWidget类。
    这意味着我们调用了两个构造方法:第一个是Example类的构造方法,第二个是被继承类的构造方法。
    super()方法返回了Example类的父类对象,并且我们调用了父类的构造方法。
    __init__()方法是Python语言中的构造方法。
    '''
        super().__init__()
        #Qwidget组件是PyQt5中所有用户界面类的基础类。
        #我们给QWidget提供了默认的构造方法。默认构造方法没有父类。
        #没有父类的widget组件将被作为窗口使用。
        #w = QWidget()
        self.setFont(QFont('SansSerif', 10)) # 设置提示框字体:10px大小的SansSerif字体
        self.setToolTip('This is a QWidget widget啊') # 创建窗体提示框


        self.resize(600, 600) # 调整了widget组件的大小。它现在是250px宽,150px高
        #self.move(300, 300) # 这个位置是屏幕上x=300,y=300的坐标
        #self.setGeometry(300, 300, 300, 220) #(X轴,Y轴,窗口宽度,窗口高度);将resize()和move()方法融合在一个方法内
        self.setWindowTitle('Main window') # 对话框标题
        self.setWindowIcon(QIcon('48X48(1).ico')) # 图标


        self.initUI()


        self.center() # 调用窗口居中方法
        self.show() # show()方法在屏幕上显示出widget


    def initUI(self):


        # 定义状态栏,在窗口最后一行
        self.statusBar().showMessage('Ready') # 显示状态栏默认文字Ready 


        # exitAction定义按钮及按钮事件
        exitAction = QAction(QIcon('48X48.ico'), '&Exit', self)  # 设置菜单按钮图标及文字      
        exitAction.setShortcut('Ctrl+Q') # 设置快捷键
        exitAction.setStatusTip('Exit application') # 鼠标浮于菜单项之上就会显示的一个状态提示
        exitAction.triggered.connect(qApp.quit) # 当我们选中特定的动作,一个触发信号会被发射。信号连接到QApplication组件的quit()方法。这样就中断了应用。


        # 定义菜单栏
        menubar = self.menuBar() # menuBar()方法创建了一个菜单栏。
        fileMenu = menubar.addMenu('&File') # 我们创建一个file菜单
        fileMenu.addAction(exitAction)  # 将退出动作添加到file菜单中。


        # 新建工具栏,并绑定事件
        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exitAction)


        qbtn = QPushButton('退出', self) # 定义退出按钮
        '''
        在PyQt5中,事件处理系统由信号&槽机制建立。如果我们点击了按钮,信号clicked被发送。
        槽可以是Qt内置的槽或Python 的一个方法调用。
        QCoreApplication类包含了主事件循环;它处理和转发所有事件。instance()方法给我们返回一个实例化对象。
        注意QCoreAppli类由QApplication创建。点击信号连接到quit()方法,将结束应用。
        事件通信在两个对象之间进行:发送者和接受者。发送者是按钮,接受者是应用对象。
        '''
        qbtn.clicked.connect(QCoreApplication.instance().quit) # 按钮点击事件
        qbtn.setToolTip('点击按钮后 本窗口关闭') # 创建按钮提示框
        qbtn.resize(qbtn.sizeHint())
        #qbtn.move(100, 100) # 按钮绝对定位


        nbtn = QPushButton('弹出新窗口', self)
        nbtn.setToolTip('弹出新窗口') # 创建按钮提示框
        nbtn.clicked.connect(self.onclick)
        nbtn.resize(nbtn.sizeHint())


        # 定义文本框组件。
        textEdit = QTextEdit()
        #self.setCentralWidget(textEdit) #我们将它设置成QMainWindow的中心组件。中心组件占据了所有剩下的空间。


        grid = QGridLayout()
        grid.setSpacing(10) # 网格间的距离为10


        #grid.addWidget(fileMenu, 1, 0)
        #grid.addWidget(toolbar, 2, 1)
        grid.addWidget(qbtn, 1, 0)
        grid.addWidget(nbtn, 1, 1)
        grid.addWidget(textEdit, 2, 0, 1,2)


        widget= QWidget() #加一个wiget布局设为中心,就能在QMainWindow 窗口实现布局了
        widget.setLayout(grid)
        self.setCentralWidget(widget)


    # 按钮事件
    def onclick(self):
        self.newWindow = SecondWindow()
        self.newWindow.show()
        #newWindow.exec_()


    # 设置窗口居中
    def center(self):
        qr = self.frameGeometry() # 获得主窗口的一个矩形特定几何图形。这包含了窗口的框架。
        # QtGui.QDesktopWidget类提供了我们桌面窗口的信息,包含了屏幕尺寸。
        cp = QDesktopWidget().availableGeometry().center() #算出相对于显示器的绝对值。并且从这个绝对值中,我们获得了屏幕中心点。
        qr.moveCenter(cp) #矩形已经设置好了它的宽和高。现在我们把矩形的中心设置到屏幕的中间去。矩形的大小并不会改变。
        self.move(qr.topLeft()) # 移动了应用窗口的左上方的点到qr矩形的左上方的点,因此居中显示在我们的屏幕上。


    # 窗口关闭事件,如果我们关闭一个QWidget,QCloseEvent类事件将被生成。
    # 要修改组件动作我们需要重新实现closeEvent()事件处理方法。
    def closeEvent(self, event):
        #代码中第一个字符串的内容被显示在标题栏上。第二个字符串是对话框上显示的文本。
        #第三个参数指定了显示在对话框上的按钮集合。最后一个参数是默认选中的按钮。
        #这个按钮一开始就获得焦点。返回值被储存在reply变量中。(标题,文本,按钮集合,默认选择按钮)
        reply = QMessageBox.question(self, 'Message标题',"Are you sure to quit?你确定要退出吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


if __name__ == '__main__':
    '''
所有的PyQt5应用必须创建一个应用(Application)对象。
sys.argv参数是一个来自命令行的参数列表。Python脚本可以在shell中运行。
这是我们用来控制我们应用启动的一种方法。
'''
    app = QApplication(sys.argv)
    ex = Example() # 应用和example对象被创建。主循环被启动。
    '''
最后,应用进入主循环。在这个地方,事件处理开始执行。
主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。
如果我们调用exit()方法或主widget组件被销毁,主循环将退出。
sys.exit()方法确保一个不留垃圾的退出。系统环境将会被通知应用是怎样被结束的。
exec_()方法有一个下划线。因为exec是Python保留关键字。因此,用exec_()来代替。
'''
    sys.exit(app.exec_())

你可能感兴趣的:(python,pyqt5,pyqt5,python)