zoukankan      html  css  js  c++  java
  • <pyqt5>通过小程序学习pyqt5

    1.最基本的windows窗口

    # coding = utf-8
    
    import sys
    # QtWidgets模块包含一整套UI组件
    from PyQt5.QtWidgets import QApplication, QWidget
    
    if __name__ == '__main__':
        # sys.argv:得到文件所在路径
        app = QApplication(sys.argv)  # 创建应用函数对象
        w = QWidget()  # 创建窗口
        w.resize(250, 150)  # 调整窗口大小
        w.move(300, 300)  # 移动窗口到屏幕的(300,300)位置,左上角(0,0)
        w.setWindowTitle('最基本的窗口')  # 设置窗口标题
        w.show()  # 将窗口显示在屏幕上
        # 主循环(main loop)从窗口系统接收事件并将它们分派到应用程序小部件
        # 调用exit()方法或者主窗口小部件被破坏,那么主循环(main loop)就会结束
        sys.exit(app.exec_())  # 进入应用程序的主循环

    运行效果  

    1.1 带图标的窗口

    # coding = utf-8
    
    import sys
    # QtWidgets模块包含一整套UI组件
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
    # QIcon方便图标的设定
    from PyQt5.QtGui import QIcon
    # 按钮动作需要的模块
    from PyQt5.QtCore import QCoreApplication
    
    
    class Ico(QWidget):
    
        def __init__(self):
            super().__init__()  # 继承QWidget,同时初始化
            self.initUI()  # 程序的GUI界面用initUI()函数创建
    
        def initUI(self):
            # 继承于QWidget
            # 前面2个是定位(x,y),后面2个是大小(宽度,高度)
            self.setGeometry(300, 300, 300, 220)
            self.setWindowTitle('最基本的窗口V1.1')  # 设置窗口标题
            self.setWindowIcon(QIcon('favicon.ico'))  # 创建QIcon对象显示图标
    
            # 增加一个退出按钮
            qbtn = QPushButton('退出', self)  # 创建一个退出按钮
            # 信号和槽,信号:点击,槽:主事件循环.当前实例.quit方法
            #  QCoreApplication包含主事件循环,它处理和调度所有事件,instance方法返回当前的实例。
            qbtn.clicked.connect(QCoreApplication.instance().quit)
            qbtn.resize(70, 30)  # 按钮的大小
            qbtn.move(50, 50)  # 按钮的位置
    
            self.show()  # 显示窗口
    
    
    if __name__ == '__main__':
        # sys.argv:得到文件所在路径
        app = QApplication(sys.argv)  # 创建应用函数对象
        ex = Ico()
        sys.exit(app.exec_())  # 进入应用程序的主循环  

    效果图

    1.2 简易的windows窗口

    # coding=utf-8
    
    from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp, QMenu
    from PyQt5.QtGui import QIcon
    import sys
    
    
    class Example(QMainWindow):
        def __init__(self):
            super().__init__()
            self.InitUI()
    
        def InitUI(self):
            self.statusBar().showMessage('准备就绪')
    
            self.setGeometry(300, 300, 400, 300)
            self.setWindowTitle('最基本的菜单V1.2')
    
            # 创建一个具有特定图标,"退出"标签
            exitAct = QAction(QIcon('草莓.ico'), '退出(&E)', self)
            exitAct.setShortcut('Ctrl+Q')  # 快捷键 Ctrl+Q
            exitAct.setStatusTip('退出程序')  # 状态栏的提示
            exitAct.triggered.connect(qApp.quit)  # 触发triggered
    
            saveMenu = QMenu('保存方式(&S)', self)  # 保存方式菜单
            # 创建一个具有特定图标,"保存"标签
            saveAct = QAction(QIcon('美女.ico'), '保存...', self)
            saveAct.setShortcut('Ctrl+S')  # 快捷键 Ctrl+s
            saveAct.setStatusTip('保存文件')  # 状态栏的提示
            # 创建一个具有特定图标,"另存为"标签
            saveasAct = QAction(QIcon('美女.ico'), '另存为...(&O)', self)
            saveasAct.setStatusTip('文件另存为')  # 状态栏的提示
            saveMenu.addAction(saveAct)  # 增加保存到子菜单
            saveMenu.addAction(saveasAct)  # 增加另存为到子菜单
    
            newAct = QAction(QIcon('美女.ico'), '新建(&N)', self)
            newAct.setShortcut('Ctrl+N')
            newAct.setStatusTip('新建文件')
    
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('文件(&F)')
            # 将这些菜单都加入文件的子菜单
            fileMenu.addAction(newAct)
            fileMenu.addMenu(saveMenu)
            fileMenu.addSeparator()
            fileMenu.addAction(exitAct)
    
            # 工具栏
            toolbar = self.addToolBar('工具栏')
            toolbar.addAction(newAct)
            toolbar.addAction(exitAct)
    
            self.show()
    
        def contextMenuEvent(self, event):
            cmenu = QMenu(self)
            newAct = cmenu.addAction("新建")
            opnAct = cmenu.addAction("保存")
            quitAct = cmenu.addAction("退出")
            # event.pos获取事件坐标,mapToGlobal方法将窗口小部件坐标转换为全局屏幕坐标。
            action = cmenu.exec_(self.mapToGlobal(event.pos()))
            if action == quitAct:
                qApp.quit()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())  

    运行效果

     

    2.猜数字小游戏

    # coding = utf-8
    
    import sys
    # UI相关
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QLineEdit
    # 图标相关
    from PyQt5.QtGui import QIcon
    # 随机数相关
    from random import randint
    
    
    class GuessNum(QWidget):
        def __init__(self):
            super().__init__()  # 继承并初始化
            self.initUI()  # GUI界面的创建
            self.num = randint(1, 100)  # 随机数的产生
            self.level = 1  # 级别
    
        def initUI(self):
            self.setGeometry(300, 300, 300, 220)  # (x,y,width,height)
            self.setWindowTitle('猜数字V1.0')  # title
            self.setWindowIcon(QIcon('favicon.ico'))  # 图标
    
            # 设置猜数字的确定按钮
            self.bt1 = QPushButton('我猜', self)  # 按钮名称
            self.bt1.setGeometry(115, 150, 70, 30)  # (x,y,width,height)
            self.bt1.setToolTip('<b>点击这里猜数字</b>')  # 按钮提示(鼠标移上去提示)
            # 信号:点击,槽:showMessage
            self.bt1.clicked.connect(self.showMessage)
    
            self.text = QLineEdit('在这里输入数字', self)  # 文本框提示
            self.text.selectAll()  # 将输入框全选
            self.text.setFocus()  # 让焦点置于文本框
            self.text.setGeometry(80, 50, 150, 30)  # (x,y,width,height)
    
            self.show()  # 来吧,展示
    
        def showMessage(self):
    
            guessnumber = int(self.text.text())  # 输入的数字
            print(self.num)  # 系统产生的随机数
    
            if guessnumber > self.num:
                QMessageBox.about(self, '结果', '猜大了!')  # 弹窗
                self.text.setFocus()  # 聚焦文本框
            elif guessnumber < self.num:
                QMessageBox.about(self, '结果', '猜小了!')
                self.text.setFocus()
            else:  # 相等的时候
                QMessageBox.about(self, '结果', '答对了!进入下一轮!')
                self.level += 1  # 级别+1
                self.num = randint(1, 100 * self.level)  # 范围扩大100
                self.text.clear()
                self.text.setFocus()
    
        def closeEvent(self, event):
            # 关闭QWidget,则生成QCloseEvent,需要重新实现closeEvent函数处理
            
            reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = GuessNum()
        sys.exit(app.exec_())

    运行效果

    坑1.0:打包不会打包图标文件,导致exe文件显示不了图标

    可能的解决方法:将图片转成字节码存储,然后直接写入

    import os, base64
    
    with open("./美女.ico", "rb") as f:
        # b64encode是编码,b64decode是解码
        base64_data = base64.b64encode(f.read())
        print(base64_data)  # 输出生成的base64码
    
    img_data = base64.b64decode(base64_data)
    with open('美女1.ico', 'wb') as f:
        f.write(img_data)
    

     

    3.石头剪刀布小游戏 

    # coding=utf-8
    
    import sys
    from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton
    from random import randint  # 随机数
    # 图标相关
    from PyQt5.QtGui import QIcon
    
    
    class RockPaperScissors(QWidget):
    
        def __init__(self):
            super().__init__()  # 继承和初始化
            self.initUI()  # GUI界面的创建
    
        def initUI(self):
            self.setGeometry(200, 200, 300, 300)  # (x,y,width,height)
            self.setWindowTitle('石头剪刀布V1.0')
            self.setWindowIcon(QIcon('美女.ico'))  # 图标
            # 设置剪刀按钮
            bt1 = QPushButton('剪刀', self)
            bt1.setGeometry(30, 180, 50, 50)
            # 设置石头按钮
            bt2 = QPushButton('石头', self)
            bt2.setGeometry(100, 180, 50, 50)
            # 设置布按钮
            bt3 = QPushButton('布', self)
            bt3.setGeometry(170, 180, 50, 50)
            # 信号:点击,槽:buttonclicked函数
            bt1.clicked.connect(self.buttonclicked)
            bt2.clicked.connect(self.buttonclicked)
            bt3.clicked.connect(self.buttonclicked)
    
            self.show()  # 显示窗口
    
        def buttonclicked(self):
            computer = randint(1, 3)
            player = 0
            # 调用这个函数,返回的就是你信号来源的对象
            sender = self.sender()
    
            # 确定鼠标点按钮是剪刀、石头、布
            if sender.text() == '剪刀':
                player = 1  # 1.代表剪刀
            elif sender.text() == '石头':
                player = 2  # 2.代表石头
            else:
                player = 3  # 3代表布
    
            # 根据剪刀石头布的判断规则,判断输赢
            if player == computer:
                QMessageBox.about(self, '结果', '平手')
            elif player == 1 and computer == 2:
                QMessageBox.about(self, '结果', '电脑:石头,电脑赢了!')
            elif player == 2 and computer == 3:
                QMessageBox.about(self, '结果', '电脑:布,电脑赢了!')
            elif player == 3 and computer == 1:
                QMessageBox.about(self, '结果', '电脑:剪刀,电脑赢了!')
            elif computer == 1 and player == 2:
                QMessageBox.about(self, '结果', '电脑:剪刀,玩家赢了!')
            elif computer == 2 and player == 3:
                QMessageBox.about(self, '结果', '电脑:石头,玩家赢了!')
            elif computer == 3 and player == 1:
                QMessageBox.about(self, '结果', '电脑:布,玩家赢了!')
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = RockPaperScissors()
        sys.exit(app.exec_())

    运行效果

    3.1 剪刀石头布+布局

    # coding=utf-8
    
    import sys
    from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
    from random import randint  # 随机数
    # 图标相关
    from PyQt5.QtGui import QIcon
    
    
    class RockPaperScissors(QWidget):
    
        def __init__(self):
            super().__init__()  # 继承和初始化
            self.initUI()  # GUI界面的创建
    
        def initUI(self):
            self.setGeometry(300, 300, 400, 300)  # (x,y,width,height)
            self.setWindowTitle('石头剪刀布V1.1')
            self.setWindowIcon(QIcon('美女.ico'))  # 图标
            # 新建三个按钮
            bt1 = QPushButton('剪刀', self)
            bt2 = QPushButton('石头', self)
            bt3 = QPushButton('布', self)
    
            hbox = QHBoxLayout()  # 设置水平布局
            hbox.addStretch(1)  # 增加拉伸因子(按钮之间水平距离)
            hbox.addWidget(bt1)  # 增加水平布局按钮1
            hbox.addWidget(bt2)  # 增加水平布局按钮3
            hbox.addWidget(bt3)  # 增加水平布局按钮3
    
            vbox = QVBoxLayout()  # 设置垂直布局
            vbox.addStretch(1)  # 增加一个拉伸因子(按钮之间的垂直距离)
            vbox.addLayout(hbox)  # 将窗口推到窗口右边
    
            self.setLayout(vbox)  # 设置窗口的主要布局
    
            # 信号:点击,槽:buttonclicked函数
            bt1.clicked.connect(self.buttonclicked)
            bt2.clicked.connect(self.buttonclicked)
            bt3.clicked.connect(self.buttonclicked)
    
            self.show()  # 显示窗口
    
        def buttonclicked(self):
            computer = randint(1, 3)
            player = 0
            # 调用这个函数,返回的就是你信号来源的对象
            sender = self.sender()
    
            # 确定鼠标点按钮是剪刀、石头、布
            if sender.text() == '剪刀':
                player = 1  # 1.代表剪刀
            elif sender.text() == '石头':
                player = 2  # 2.代表石头
            else:
                player = 3  # 3代表布
    
            # 根据剪刀石头布的判断规则,判断输赢
            if player == computer:
                QMessageBox.about(self, '结果', '平手')
            elif player == 1 and computer == 2:
                QMessageBox.about(self, '结果', '电脑:石头,电脑赢了!')
            elif player == 2 and computer == 3:
                QMessageBox.about(self, '结果', '电脑:布,电脑赢了!')
            elif player == 3 and computer == 1:
                QMessageBox.about(self, '结果', '电脑:剪刀,电脑赢了!')
            elif computer == 1 and player == 2:
                QMessageBox.about(self, '结果', '电脑:剪刀,玩家赢了!')
            elif computer == 2 and player == 3:
                QMessageBox.about(self, '结果', '电脑:石头,玩家赢了!')
            elif computer == 3 and player == 1:
                QMessageBox.about(self, '结果', '电脑:布,玩家赢了!')
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = RockPaperScissors()
        sys.exit(app.exec_())

    运行效果

    4.个人信息登记 

    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QInputDialog, QTextBrowser
    import sys
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setGeometry(500, 500, 300, 550)
            self.setWindowTitle('个人信息登记')
    
            self.lb1 = QLabel('姓名:', self)
            self.lb1.move(20, 20)
    
            self.lb2 = QLabel('年龄:', self)
            self.lb2.move(20, 80)
    
            self.lb3 = QLabel('性别:', self)
            self.lb3.move(20, 140)
    
            self.lb4 = QLabel('身高(cm):', self)
            self.lb4.move(20, 200)
    
            self.lb5 = QLabel('基本信息:', self)
            self.lb5.move(20, 260)
    
            self.lb6 = QLabel('旋涡鸣人', self)
            self.lb6.move(80, 20)
    
            self.lb7 = QLabel('14', self)
            self.lb7.move(80, 80)
    
            self.lb8 = QLabel('男', self)
            self.lb8.move(80, 140)
    
            self.lb9 = QLabel('155', self)
            self.lb9.move(120, 200)
    
            self.tb = QTextBrowser(self)
            self.tb.move(20, 320)
    
            self.bt1 = QPushButton('修改姓名', self)
            self.bt1.move(200, 20)
    
            self.bt2 = QPushButton('修改年龄', self)
            self.bt2.move(200, 80)
    
            self.bt3 = QPushButton('修改性别', self)
            self.bt3.move(200, 140)
    
            self.bt4 = QPushButton('修改身高', self)
            self.bt4.move(200, 200)
    
            self.bt5 = QPushButton('修改信息', self)
            self.bt5.move(200, 260)
    
            self.show()
    
            self.bt1.clicked.connect(self.showDialog)
            self.bt2.clicked.connect(self.showDialog)
            self.bt3.clicked.connect(self.showDialog)
            self.bt4.clicked.connect(self.showDialog)
            self.bt5.clicked.connect(self.showDialog)
    
        def showDialog(self):
            sender = self.sender()
            sex = ['男', '女']
            if sender == self.bt1:
                text, ok = QInputDialog.getText(self, '修改姓名', '请输入姓名:')
                if ok:
                    self.lb6.setText(text)
            elif sender == self.bt2:
                text, ok = QInputDialog.getInt(self, '修改年龄', '请输入年龄:', min=1)
                if ok:
                    self.lb7.setText(str(text))
            elif sender == self.bt3:
                text, ok = QInputDialog.getItem(self, '修改性别', '请选择性别:', sex)
                if ok:
                    self.lb8.setText(text)
            elif sender == self.bt4:
                text, ok = QInputDialog.getDouble(self, '修改身高', '请输入身高:', min=1.0)
                if ok:
                    self.lb9.setText(str(text))
            elif sender == self.bt5:
                text, ok = QInputDialog.getMultiLineText(self, '修改信息', '请输入个人信息:')
                if ok:
                    self.tb.setText(text)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

      

    运行效果

    5.读取文件内容并改变文字字体和颜色 

    # conding=utf-8
    
    from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
    # 颜色选择对话框,字体选择对话框,富文本呈现框,打开文件对话框
    from PyQt5.QtWidgets import QColorDialog, QFontDialog, QTextEdit, QFileDialog
    import sys
    # QIcon方便图标的设定
    from PyQt5.QtGui import QIcon
    
    
    class Example(QWidget):
        def __init__(self):
            super().__init__()  # 继承QWidget,同时初始化
    
            self.initUI()  # 程序的GUI界面用initUI()函数创建
    
        def initUI(self):
    
            self.setGeometry(300, 300, 500, 300)  # (x,y,width,height)
            self.setWindowTitle('打开文件,改变内容颜色和字体V1.0')
            self.setWindowIcon(QIcon('./美女.ico'))  # 创建QIcon对象显示图标
    
            self.tx = QTextEdit(self)  # 富文本编辑器
            self.tx.setGeometry(20, 20, 300, 270)  # (x,y,width,height)
    
            # 三个按钮
            self.bt1 = QPushButton('打开文件', self)
            self.bt1.move(350, 20)
            self.bt2 = QPushButton('选择字体', self)
            self.bt2.move(350, 70)
            self.bt3 = QPushButton('选择颜色', self)
            self.bt3.move(350, 120)
    
            # 连接点击事件
            self.bt1.clicked.connect(self.openfile)
            self.bt2.clicked.connect(self.choicefont)
            self.bt3.clicked.connect(self.choicecolor)
    
            self.show()
    
        def openfile(self):
            # 第一个按钮触发的函数
    
            # 2个参数,getOpenFileName方法中获得第一个参数是文件名,第二个获得该文件的路径
            fname = QFileDialog.getOpenFileName(self, '打开文件', './')
            # 如果想增加文件限制,可以写成
            # fname = QFileDialog.getOpenFileName(self, '打开文件', './', ("Images (*.png *.xpm *.jpg)"))
            # 打开该文件并把内容写入富文本编辑器
            if fname[0]:
                with open(fname[0], 'r', encoding='utf-8', errors='ignore') as f:
                    self.tx.setText(f.read())
    
        def choicefont(self):
            # 第二个按钮触发的函数
            font, ok = QFontDialog.getFont()
            # 用户点击ok键,那么我们在文本编辑小部件中选择的内容会使用我们选择的字体。
            if ok:
                self.tx.setCurrentFont(font)
    
        def choicecolor(self):
            # 第三个按钮触发的函数
            col = QColorDialog.getColor()
            # 如果颜色有效,那么我们在文本编辑小部件中选择的内容会使用我们选择的颜色。
            if col.isValid():
                self.tx.setTextColor(col)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

      

    执行效果

    6.打开多个文件和保存、打印

    # conding=utf-8
    
    # QtWidgets模块包含一整套UI组件
    from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QTextEdit, QFileDialog, QDialog
    # 提供了一组附加功能来管理设备的特定功能,例如方向和分辨率等。
    from PyQt5.QtPrintSupport import QPageSetupDialog, QPrintDialog, QPrinter
    import sys
    # 图标相关
    from PyQt5.QtGui import QIcon
    
    class Example(QWidget):
        def __init__(self):
            super().__init__()
            self.printer = QPrinter()  # 初始化生成QPrinter()对象
            self.initUI()
    
        def initUI(self):
            self.setGeometry(300, 300, 500, 400)  # (x,y,width,height)
            self.setWindowTitle('保存、打印文件V1.0')
            self.setWindowIcon(QIcon('美女.ico'))  # 图标
    
            self.tx = QTextEdit(self)  # 富文本编辑器
            self.tx.setGeometry(20, 20, 300, 270)
    
            # 五个按钮
            self.bt1 = QPushButton('打开文件', self)
            self.bt1.move(350, 20)
            self.bt2 = QPushButton('打开多个文件', self)
            self.bt2.move(350, 70)
            self.bt5 = QPushButton('保存文件', self)
            self.bt5.move(350, 220)
            self.bt6 = QPushButton('页面设置', self)
            self.bt6.move(350, 270)
            self.bt7 = QPushButton('打印文档', self)
            self.bt7.move(350, 320)
    
            # 分别链接五个函数
            self.bt1.clicked.connect(self.openfile)
            self.bt2.clicked.connect(self.openfiles)
            self.bt5.clicked.connect(self.savefile)
            self.bt6.clicked.connect(self.pagesettings)
            self.bt7.clicked.connect(self.printdialog)
    
            self.show()  # 展示
    
        def openfile(self):
            # 在富文本编辑器打开文件
            fname = QFileDialog.getOpenFileName(self, '打开文件', './')
            if fname[0]:
                with open(fname[0], 'r', encoding='utf-8', errors='ignore') as f:
                    self.tx.setText(f.read())
    
        def openfiles(self):
            # 打开多个文件,以列表的方式存放路径
            fnames = QFileDialog.getOpenFileNames(self, '打开多个文件', './')
            if fnames[0]:
                for fname in fnames[0]:
                    with open(fname, 'r', encoding='utf-8', errors='ignore') as f:
                        self.tx.append(f.read())
    
        def savefile(self):
            # 所谓保存文件,将富文本编辑器的内容写入文件
            fileName = QFileDialog.getSaveFileName(self, '保存文件', './', "Text files (*.txt)")
            if fileName[0]:
                with open(fileName[0], 'w', encoding='utf-8', errors='ignore') as f:
                    f.write(self.tx.toPlainText())
    
        def pagesettings(self):
            # 打印页面配置
            printsetdialog = QPageSetupDialog(self.printer, self)
            printsetdialog.exec_()
    
        def printdialog(self):
            # 调用打印机进行打印
            printdialog = QPrintDialog(self.printer, self)
            if QDialog.Accepted == printdialog.exec_():
                self.tx.print(self.printer)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

    运行效果

     6.进度条显示

    from PyQt5.QtWidgets import QApplication, QWidget, QToolButton, QMainWindow, QProgressBar
    from PyQt5.QtCore import Qt
    import sys
    import time
    
    
    class my_window(QMainWindow):
        def __init__(self):
            super().__init__()  # 继承QMainWindow 并初始化
            self.initUI()  # 程序的GUI界面用initUI()函数创建
            self.show()  # 显示界面
    
        def initUI(self):
            # self.setGeometry(300, 300, 400, 260)  # (x,y,width,height)
            self.resize(400, 260)  # 固定GUI大小
            self.setWindowTitle("进度条显示")  # 标题
            self.statusBar()  # 显示状态栏
    
            self.btn_1 = QToolButton(self)  # 按钮1
            self.btn_1.setGeometry(5, 5, 50, 30)  # 按钮的位置和大小
            self.btn_1.setText('开始')  # 按钮名字
            self.btn_1.setCheckable(True)  # 设置按钮可以点击状态
            self.btn_1.setChecked(False)  # 设置按钮不可用状态
            self.btn_1.setAutoRaise(True)  # 设置按钮自动弹起
            self.btn_1.setToolButtonStyle(Qt.ToolButtonTextOnly)  # 只显示文字
            self.btn_1.clicked.connect(self.showDetail)  # 点击后链接函数
            self.progressBar = QProgressBar(self)  # 提供一个水平的进度条
            self.progressBar.setGeometry(20, 100, 350, 20)  # (x,y,width,height)
            self.progressBar.setMaximum(100)  # 最大值100
    
        def showDetail(self):
            if self.btn_1.isChecked():
                self.statusBar().showMessage("正在增加...")  # 状态栏提示信息
                self.btn_1.setText('停止')  # 点击之后按钮的显示
                for i in range(101):  # 进度条
                    self.progressBar.setValue(i)  # 进度条显示的值
                    time.sleep(0.01)  # 每0.01刷新一次
                self.statusBar().showMessage('点一下停止就复原')  # 进度条完成后的提示信息
            else:
                self.statusBar().showMessage("测试")  # 其他情况状态栏的显示
                self.progressBar.reset()  # 复原进度条
                self.btn_1.setText('开始')  # 将按钮重新设置成开始
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = my_window()
        sys.exit(app.exec_())

    显示效果

     7.控件大乱斗

    import sys
    from PyQt5.QtWidgets import QApplication, QPushButton, QLabel, QWidget, QMainWindow, QLineEdit, QMessageBox, 
        QTextEdit
    from PyQt5.QtCore import QTimer, Qt
    from PyQt5.QtGui import QFont, QPalette
    
    n = 0
    
    
    class MyDemo(QMainWindow):
        def __init__(self):
            super().__init__()
            self.init_ui()
    
        def init_ui(self):
            self.resize(600, 500)  # 设置窗口大小
            self.setWindowTitle('控件大乱斗')  # 窗口名称
            self.btn_1 = QPushButton('开始', self)  # 第一个按钮名称
            self.btn_1.setGeometry(100, 200, 100, 50)  # 按钮位置
            self.btn_1.clicked.connect(self.push_btn_1)  # 按钮连接的函数
            self.btn_2 = QPushButton('退出', self)  # 第二个按钮名称
            self.btn_2.setGeometry(450, 200, 100, 50)  # 位置
            self.btn_2.clicked.connect(self.push_btn_2)  # 按钮连接的函数
            self.btn_3 = QPushButton('停止警告提示', self)  # 第三个按钮名称
            self.btn_3.setGeometry(450, 100, 100, 50)  # 按钮位置
            self.btn_3.clicked.connect(self.push_btn_3)  # 按钮连接的函数
            self.btn_4 = QPushButton('暂停', self)  # 第四个按钮名称
            self.btn_4.setGeometry(300, 100, 100, 50)  # 位置
            self.btn_4.clicked.connect(self.push_btn_4)  # 按钮连接函数
            self.btn_5 = QPushButton('清空显示信息', self)  # 第五个按钮
            self.btn_5.setGeometry(100, 400, 100, 50)  # 位置
            self.btn_5.clicked.connect(self.push_btn_5)  # 按钮连接函数
            self.btn_6 = QPushButton('清除数字', self)  # 第六个按钮
            self.btn_6.setGeometry(300, 155, 100, 40)  # 按钮位置
            self.btn_6.clicked.connect(self.push_btn_6)  # 按钮连接函数
            self.label_1 = QLabel('<h1>?</h1>', self)  # 第一个标签显示
            self.label_1.setAlignment(Qt.AlignCenter)  # 标签对其方式,纵向居中
            self.label_1.setGeometry(100, 300, 150, 50)  # 标签大小
            self.label_2 = QLabel('<h1>...</h1>', self)  # 第二个标签显示
            self.label_2.setAlignment(Qt.AlignCenter)  # 标签对其方式,纵向居中
            self.label_2.setGeometry(100, 100, 100, 50)  # 标签位置
            self.linEdit_1 = QLineEdit('state', self)  # 显示框
            self.linEdit_1.setAlignment(Qt.AlignCenter)  # 标签对其方式,纵向居中
            self.linEdit_1.setFont(QFont('', 16, QFont.Bold))  # 设置字体属性
            self.linEdit_1.setGeometry(220, 200, 200, 50)  # 标签位置
            self.textEdit_1 = QTextEdit(self)  # 多行文本框
            self.textEdit_1.setGeometry(300, 270, 260, 200)  # 位置
            self.mt = QTimer(self)  # 计时器
            self.mt.timeout.connect(self.my_function)  # 计时器连接函数
    
            # 调色板,三种颜色
            self.my_color_red = QPalette()
            self.my_color_red.setColor(QPalette.WindowText, Qt.red)
            self.my_color_green = QPalette()
            self.my_color_green.setColor(QPalette.WindowText, Qt.green)
            self.my_color_black = QPalette()
            self.my_color_black.setColor(QPalette.WindowText, Qt.black)
    
            self.show()  # 显示
    
        def my_function(self):
            global n
            try:
                # 偶数时,显示情况
                if n % 2 == 0:
                    self.label_1.setText('<h1>注意!!!</h1>')
                    self.label_2.setText('<h1>警告!!!</h1>')
                    self.label_1.setPalette(self.my_color_red)
                    self.label_2.setPalette(self.my_color_red)
                    self.textEdit_1.append("<font color='red' size='14' >Hello World!</font>")
                # 5的倍数时,显示情况
                elif n % 5 == 0:
                    self.label_1.setText('<h1>注意!!!</h1>')
                    self.label_2.setText('<h1>警告!!!</h1>')
                    self.label_1.setPalette(self.my_color_green)
                    self.label_2.setPalette(self.my_color_green)
                    self.textEdit_1.append("<font color='green' size='14' >Hello People!</font>")
                # 其他时间,其他时间显示情况
                else:
                    self.label_1.setText('<h1>I LOVE PYTHON </h1>')
                    self.label_2.setText('<h1>...</h1>')
                    self.label_1.setPalette(self.my_color_black)
                    self.label_2.setPalette(self.my_color_black)
                    self.textEdit_1.append("<font color='black' size='14'>Life is short</font>")
    
                n += 1
                # 显示框
                self.linEdit_1.setText('number: %d' % n)
            # 错误捕捉
            except Exception as e:
                print(e)
    
        # 计时器开始运行
        def push_btn_1(self):
            self.mt.start(200)
    
        # 调用关闭函数
        def push_btn_2(self):
            self.close()
    
        def push_btn_3(self):
            self.label_2.setText('<h1>...</h1>')
    
        # 停止计时
        def push_btn_4(self):
            self.mt.stop()
    
        # 清除多行
        def push_btn_5(self):
            self.textEdit_1.clear()
    
        def push_btn_6(self):
            global n
            n = 0
    
        # 退出
        def closeEvent(self, event):
            reply = QMessageBox.question(self, 'exit', 'Are you sure to exit?', QMessageBox.Yes | QMessageBox.Cancel)
            if reply == QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = MyDemo()
        sys.exit(app.exec_())
    

     

    显示效果

     8.计算CPU性能

    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    import sys
    
    
    class WorkThread(QThread):
        trigger = pyqtSignal()
    
        def __init__(self):
            super(WorkThread, self).__init__()
    
        def run(self):
            for i in range(200000000):
                s = 2 * i
            self.trigger.emit()
    
    
    class a_main(QWidget):
        global sec
        sec = 0
    
        def __init__(self):
            super(a_main, self).__init__()
            self.InitUi()
    
        def InitUi(self):
            self.top = QWidget()
            self.top.setWindowTitle('CPU性能检测')
            layout = QVBoxLayout(self.top)
            self.textlib = QTextEdit('计算s = 2*i,i = 200000000')
            layout.addWidget(self.textlib)
            self.lcdNumber = QLCDNumber()
            layout.addWidget(self.lcdNumber)
            button = QPushButton('开始')
            layout.addWidget(button)
            self.timer = QTimer()
            self.workThread = WorkThread()
            button.clicked.connect(self.work)
            self.timer.timeout.connect(self.countTime)
            self.top.show()
    
        def countTime(self):
            global sec
            sec += 1
            self.lcdNumber.display(sec)
            self.textlib.append('运行 {} 秒'.format(sec))
    
        def work(self):
            self.timer.start(1000)
            # workThread = WorkThread()
            self.workThread.start()
            self.workThread.trigger.connect(self.timeStop)
    
        def timeStop(self):
            self.timer.stop()
            self.textlib.append('运行结束用时: {} 秒'.format(self.lcdNumber.value()))
            global sec
            sec = 0
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = a_main()
        sys.exit(app.exec_())
    

      

    运行效果

  • 相关阅读:
    2、ansilbe常用模块详解及inventory介绍
    1、Ansible简介及简单安装、使用
    dhcp、tftp及pxe简介
    php-fpm常见错误
    php之编译安装
    nginx之常见错误
    ssh之秘钥登陆
    MySQL之主从复制
    Python之虚拟环境
    php调试工具之firePHP
  • 原文地址:https://www.cnblogs.com/shuimohei/p/13677927.html
Copyright © 2011-2022 走看看