0
点赞
收藏
分享

微信扫一扫

PyQt第二课

RIOChing 2022-05-05 阅读 51
qtpythonui

第一课链接
参考资料
第二课实现了菜单栏、工具栏、状态栏、文本编辑框
效果:
在这里插入图片描述
代码及注释:

from PyQt5.QtWidgets import QApplication,QWidget,QToolTip,QPushButton,QMessageBox,QDesktopWidget
from PyQt5.QtWidgets import QMainWindow,QAction,qApp,QMenu,QTextEdit
from PyQt5.QtGui import QIcon,QFont#创建应用图标
#构造一个 Qt core 应用程序。core 应用程序是没有图形用户界面的应用程序。此类应用程序用于控制台或服务器进程。
from PyQt5.QtCore import QCoreApplication
import sys

#创建了一个很经典的菜单框架,有右键菜单,工具栏和状态栏。
class App1(QMainWindow):
    def __init__(self):#构造函数,实例初始化
        #调用了两个构造器,一个是这个类本身的,一个是这个类继承的
        super().__init__()#super()构造器方法返回父级的对象
        self.initUI()#每个对象创建后都会执行这个函数

    def initUI(self):
        #创建一个文本编辑区域
        textEdit = QTextEdit()
        self.setCentralWidget(textEdit)

        QToolTip.setFont(QFont('SansSerif', 10))
        # self.statusBar().showMessage('Ready')#状态栏
        self.statusbar = self.statusBar()
        self.statusbar.showMessage('Ready')
        
        #退出
        exitAct = QAction(QIcon('exit.png'), '&Exit', self)#QAction是菜单栏、工具栏或者快捷键的动作的组合
        exitAct.setShortcut('Ctrl+Q')#设置快捷键退出应用
        exitAct.setStatusTip('Exit application')#状态
        #这个行为被触发的时候,会调用QtGui.QMainWindow的quit方法退出应用。
        exitAct.triggered.connect(qApp.quit)
        
        #创建一个工具栏,里面只有一个退出的工具
        #工具栏就是常用的命令的集合
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAct)

        #当执行这个指定的动作时,就触发了一个事件。这个事件跟QApplication的quit()行为相关联,
        # 所以这个动作就能终止这个应用。
        
        menubar = self.menuBar()#菜单栏
        menubar.setNativeMenuBar(False)#mac下需加此语句才能正常显示菜单栏
        fileMenu = menubar.addMenu('&File')#用addMenu()在上面添加了一个file菜单
        fileMenu.addAction(exitAct)#addAction()关联了点击退出应用的事件。
        
        #创建了一个行为菜单。这个行为/动作能切换状态栏显示或者隐藏
        viewMenu = menubar.addMenu('View')
        viewStatAct = QAction('View statusbar', self, checkable=True)
        viewStatAct.setStatusTip('View statusbar')
        viewStatAct.setChecked(True)
        viewStatAct.triggered.connect(self.toggleMenu)
        viewMenu.addAction(viewStatAct)

        #添加子菜单:文件->导入文件->导入mail
        impMenu = QMenu('Import', self)#子菜单
        impAct = QAction('Import mail', self)
        impAct.setStatusTip('导入文件')
        impMenu.addAction(impAct)
        fileMenu.addMenu(impMenu)#把动作添加到菜单里

        ##添加子菜单:文件->新建
        newAct = QAction('New', self)
        newAct.setStatusTip('新建工程')
        fileMenu.addAction(newAct)

        self.setGeometry(300, 300, 300, 220)#相当于resize和move方法的合体
        self.setWindowTitle('带Icon的窗体')
        self.center()#自定义的函数,把窗口挪到中间
        self.show()#一个没有父对象的控件默认不显示,必须调用show才可以显示
    #消息盒子
    def closeEvent(self, event):
        #参数按顺序分别是(忽略self),标题栏显示的信息,对话框内显示的信息
        # 消息框内的两个按钮,默认选中的按钮(可以看到这里默认选否)
        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()#点击否 忽略该信号

    def toggleMenu(self, state):

        if state:
            self.statusbar.show()
        else:
            self.statusbar.hide()
    #程序放在屏幕中央
    def center(self):

        qr = self.frameGeometry()#获得主窗口所在的框架。
        #QDesktopWidget提供了用户的桌面信息,包括屏幕的大小。
        cp = QDesktopWidget().availableGeometry().center()#获取显示器的分辨率,然后得到屏幕中间点的位置。
        print(cp)
        #通过move函数把主窗口的左上角移动到其框架的左上角,这样就把窗口居中了。
        qr.moveCenter(cp)
        self.move(qr.topLeft())
if __name__ == '__main__':
    #当别人通过命令行启动此程序时,通过接收命令行传递的参数实现不同的业务逻辑
    app = QApplication(sys.argv)
    ex = App1()
    app.setWindowIcon(QIcon('app.ico'))
    #保证程序不会退出,进入消息循环,使得代码在运行到这个位置时不会结束
    sys.exit(app.exec_())#可以返回程序退出码,帮助我们判断程序退出的原因
举报

相关推荐

0 条评论