精华内容
下载资源
问答
  • pyqt5项目案例
    千次阅读
    更多相关内容
  • PyQt5 项目案例的系列源代码资源,通过这些案例代码可以举一反三,进行综合开发一些 PyQt5 的GUI应用程序。
  • PyQt5案例汇总(完整版)

    万次阅读 多人点赞 2019-11-03 23:47:42
    PyQt5案例汇总(完整版) 起步 PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。 Qt库是一套最有用的GUI库。 PyQt5是作为一套Python模块实现的。他已经超过620个类和...

    个人博客点这里

    PyQt5案例汇总(完整版)

    起步

    PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。

    Qt库是一套最有用的GUI库。

    PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主流操作系统上的多平台组件,包括Unix,Windows和Mac OS。

    说明

    下面小编就给大家提供一些简单的pyqt5的案例,如有需要拿走不谢!!!

    本文转载from:PyQt5-Chinese-tutorial

    菜单栏和工具栏

    01窗口居中

    
    # 导入需要的包和模块
    import sys
    from PyQt5.QtWidgets import QWidget
    from PyQt5.QtWidgets import QDesktopWidget
    # QDesktopWidget这个库提供了用户的桌面信息,包括屏幕的大小
    from PyQt5.QtWidgets import QApplication
    
    # 创建一个类
    class Ex(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.resize(250,150)
            self.center()
            # 这个方法调用我们下面写的,实现对话框居中的方法
            self.setWindowTitle('chuangkou要居中')
            self.show()
    
        def center(self):
            qr = self.frameGeometry()
            # 得到了主窗口大小
            print('qr:',qr)
            cp = QDesktopWidget().availableGeometry().center()
            # 获取显示器的分辨率,然后得到中间点的位置
            print('cp:',cp)
            qr.moveCenter(cp)
            # 然后把自己的窗口的中心点放到qr的中心点
            self.move(qr.topLeft())
    
    app = QApplication(sys.argv)
    demo1 = Ex()
    sys.exit(app.exec_())
    

    02 状态栏

    
    # 导入需要的包和模块
    import sys
    # from PyQt5.QtWidgets import QWidget
    # from PyQt5.QtWidgets import QDesktopWidget
    # QDesktopWidget这个库提供了用户的桌面信息,包括屏幕的大小
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWidgets import QMainWindow
    
    
    class Ex(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            # 状态栏是由这个创建的
            self.statusBar().showMessage('准备')
            # 调用QtGui.QMainWindow 类的 statusBar()方法
            #3 创建状态栏.第一次调用创建一个状态栏,返回一个状态栏对象.
            #3 showMessage()方法在状态栏上显示一条信息
            self.setGeometry(300,300,250,150)
            self.setWindowTitle('标题还是要取的')
            #显示
            self.show()
    
    app = QApplication(sys.argv)
    demo1 = Ex()
    sys.exit(app.exec_())
    
    

    03菜单栏

    
    import sys
    from PyQt5.QtWidgets import QMainWindow
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWidgets import QAction
    from PyQt5.QtWidgets import qApp
    from PyQt5.QtGui import QIcon
    
    class Ex(QMainWindow):
    
        def __init__(self):
            super(Ex, self).__init__()
            self.initUI()
    
        def initUI(self):
            exitAct = QAction(QIcon("exit.png"),'&Exit',self)
            print(exitAct)
            exitAct.setShortcut("ctrl+q")
            exitAct.setStatusTip('tuichu应用')
            exitAct.triggered.connect(qApp.quit)
    
            self.statusBar()
    
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('&File')
            fileMenu.addAction(exitAct)
    
            self.setGeometry(300,300,399,200)
            self.setWindowTitle('决赛你电脑的')
            self.show()
    
    app = QApplication(sys.argv)
    demo1 = Ex()
    sys.exit(app.exec_())
    
    

    04子菜单

    
    import sys
    from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
    
        def initUI(self):
    
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('File')
            impMenu = QMenu('Import', self)
            impAct = QAction('Import mail', self)
            impMenu.addAction(impAct)
    
            newAct = QAction('New', self)
    
            fileMenu.addAction(newAct)
            fileMenu.addMenu(impMenu)
    
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('Submenu')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    05 勾选菜单

    
    import sys
    from PyQt5.QtWidgets import QMainWindow, QAction, QApplication
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.statusbar = self.statusBar()
            self.statusbar.showMessage('Ready')
    
            menubar = self.menuBar()
            viewMenu = menubar.addMenu('View')
    
            # 本例创建了一个行为菜单。这个行为/动作能切换状态栏显示或者隐藏。
            viewStatAct = QAction('View statusbar', self, checkable=True)
            viewStatAct.setStatusTip('View statusbar')        # 用checkable选项创建一个能选中的菜单。
            viewStatAct.setChecked(True)        # 默认设置为选中状态
            viewStatAct.triggered.connect(self.toggleMenu)
    
            viewMenu.addAction(viewStatAct)
            # 依据选中状态切换状态栏的显示与否。
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('Check menu')
            self.show()
    
        def toggleMenu(self, state):
    
            if state:
                self.statusbar.show()
            else:
                self.statusbar.hide()
    
    app = QApplication(sys.argv)
    demo1 = Example()
    sys.exit(app.exec_())
    

    06 右键菜单

    
    import sys
    from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication
    
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
        def initUI(self):
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('Context menu')
            self.show()
    
        def contextMenuEvent(self, event):
            cmenu = QMenu(self)
    
            newAct = cmenu.addAction("New")
            print(newAct)
            opnAct = cmenu.addAction("Open")
            print(opnAct)
            quitAct = cmenu.addAction("Quit")
            action = cmenu.exec_(self.mapToGlobal(event.pos()))
    
            if action == quitAct:
                qApp.quit()
            elif action == opnAct:
                print('打开就打开')
            elif action == newAct:
                print('新建就新建')
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    07工具栏

    
    # 菜单栏包含了所有的命令,工具栏就是常用的命令的集合。
    
    import sys
    from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
    from PyQt5.QtGui import QIcon
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            exitAct = QAction(QIcon('logo.png'), 'Exit', self)
            exitAct.setShortcut('Ctrl+Q')
            exitAct.triggered.connect(qApp.quit)
            # 和上面的菜单栏差不多,这里使用了一个行为对象,
            # 这个对象绑定了一个标签,一个图标和一个快捷键。
            # 这些行为被触发的时候,会调用QtGui.QMainWindow的quit方法退出应用。
            self.toolbar = self.addToolBar('Exit')
            self.toolbar.addAction(exitAct)
    
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('Toolbar')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    # 上面的例子中,我们创建了一个工具栏这个工具栏只有一个退出应用的动作
    
    

    08主窗口(啥都有的呢)

    
    # 本模块的功能:<>
    import sys
    from PyQt5.QtWidgets import QMainWindow
    from PyQt5.QtWidgets import QTextEdit
    from PyQt5.QtWidgets import QAction
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtGui import QIcon
    
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
    
        def initUI(self):
    
            textEdit = QTextEdit()
            self.setCentralWidget(textEdit)
    
            exitAct = QAction(QIcon('logo.png'), '退退退', self)
            exitAct.setShortcut('Ctrl+Q')
            exitAct.setStatusTip('退出应用')
            exitAct.triggered.connect(self.close)
    
            self.statusBar()
    
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('文件')
            fileMenu.addAction(exitAct)
    
            toolbar = self.addToolBar('退出')
            toolbar.addAction(exitAct)
    
            self.setGeometry(300, 300, 350, 250)
            self.setWindowTitle('代码编辑工具')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    布局管理

    09绝对定位的应用

    
    import sys
    from PyQt5.QtWidgets import QWidget, QLabel, QApplication
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            lbl1 = QLabel('Zetcode', self)
            lbl1.move(15, 10)
    
            lbl2 = QLabel('tutorials', self)
            lbl2.move(35, 40)
    
            lbl3 = QLabel('for programmers', self)
            lbl3.move(55, 70)
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Absolute')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    
    # 绝对定位其实说白了就是使用相对于原点的像素来进行计算
    

    10 盒子布局

    
    import sys
    from PyQt5.QtWidgets import (QWidget, QPushButton,
        QHBoxLayout, QVBoxLayout, QApplication)
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            okButton = QPushButton("OK")
            cancelButton = QPushButton("Cancel")
    
            hbox = QHBoxLayout()
            hbox.addStretch(1)
            hbox.addWidget(okButton)
            hbox.addWidget(cancelButton)
    
            vbox = QVBoxLayout()
            vbox.addStretch(1)
            vbox.addLayout(hbox)
    
            self.setLayout(vbox)
    
            self.setGeometry(300, 300, 300, 150)
            self.setWindowTitle('Buttons')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    11 栅格布局(表格)

    
    import sys
    from PyQt5.QtWidgets import (QWidget, QGridLayout,
        QPushButton, QApplication)
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
    
        def initUI(self):
    
            grid = QGridLayout()
            self.setLayout(grid)
    
            names = ['Cls', 'Bck', '', 'Close',
                     '7', '8', '9', '/',
                    '4', '5', '6', '*',
                     '1', '2', '3', '-',
                    '0', '.', '=', '+']
    
            positions = [(i,j) for i in range(5) for j in range(4)]
    
            for position, name in zip(positions, names):
    
                if name == '':
                    continue
                button = QPushButton(name)
                grid.addWidget(button, *position)
    
            self.move(300, 150)
            self.setWindowTitle('Calculator')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    12 制作提交反馈信息的布局

    
    import sys
    from PyQt5.QtWidgets import \
        (QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout, QApplication)
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
        def initUI(self):
            title = QLabel('Title')
            author = QLabel('Author')
            review = QLabel('Review')
    
            titleEdit = QLineEdit()
            authorEdit = QLineEdit()
            reviewEdit = QTextEdit()
    
            grid = QGridLayout()
            grid.setSpacing(10)
    
            grid.addWidget(title, 1, 0)
            grid.addWidget(titleEdit, 1, 1)
    
            grid.addWidget(author, 2, 0)
            grid.addWidget(authorEdit, 2, 1)
    
            grid.addWidget(review, 3, 0)
            grid.addWidget(reviewEdit, 3, 1, 5, 1)
    
            self.setLayout(grid)
    
            self.setGeometry(300, 300, 350, 300)
            self.setWindowTitle('Review')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    事件和信号

    13 信号和槽机制

    
    '''
    事件
    signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了。
    所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,
    比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。
    在事件模型中,有三个角色:
    事件源
    事件
    事件目标
    事件源就是发生了状态改变的对象。事件是这个对象状态改变的内容。
    事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。
    PyQt5处理事件方面有个signal and slot机制。Signals and slots用于对象间的通讯。
    事件触发的时候,发生一个signal,slot是用来被Python调用的
    (相当于一个句柄?这个词也好恶心,就是相当于事件的绑定函数)slot只有在事件触发的时候才能调用。
    '''
    
    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import \
        (QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication)
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            lcd = QLCDNumber(self)
            print("lcd:",lcd)
            sld = QSlider(Qt.Horizontal, self)
            print("sld",sld)
            vbox = QVBoxLayout()
            print(vbox)
            vbox.addWidget(lcd)
            vbox.addWidget(sld)
    
            self.setLayout(vbox)
            print(lcd.display)
            sld.valueChanged.connect(lcd.display)
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('信号和槽机制的')
            self.show()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    14 重构事件处理器

    
    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QWidget, QApplication
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('事件的手')
            self.show()
    
    
        def keyPressEvent(self, e):
    
            if e.key() == Qt.Key_Escape:
                self.close()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    15 事件对像

    
    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QLabel
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            grid = QGridLayout()
            grid.setSpacing(10)
    
            x = 0
            y = 0
    
            self.text = "x: {0},  y: {1}".format(x, y)
    
            self.label = QLabel(self.text, self)
            grid.addWidget(self.label, 0, 0, Qt.AlignTop)
    
            self.setMouseTracking(True)
    
            self.setLayout(grid)
    
            self.setGeometry(300, 300, 350, 200)
            self.setWindowTitle('Event object')
            self.show()
    
    
        def mouseMoveEvent(self, e):
    
            x = e.x()
            y = e.y()
    
            text = "x: {0},  y: {1}".format(x, y)
            self.label.setText(text)
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    16事件发送

    
    import sys
    from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
    
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            btn1 = QPushButton("按钮老大", self)
            btn1.move(30, 50)
    
            btn2 = QPushButton("按钮老二", self)
            btn2.move(150, 50)
    
            btn1.clicked.connect(self.buttonClicked)
            btn2.clicked.connect(self.buttonClicked)
    
            self.statusBar()
    
            self.setGeometry(300, 300, 290, 150)
            self.setWindowTitle('事件发送')
            self.show()
    
    
        def buttonClicked(self):
    
            sender = self.sender()
            self.statusBar().showMessage(sender.text() + '被按那儿了')
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    17 信号发送

    
    import sys
    from PyQt5.QtCore import pyqtSignal, QObject
    from PyQt5.QtWidgets import QMainWindow, QApplication
    
    
    class Communicate(QObject):
    
        closeApp = pyqtSignal()
    
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.c = Communicate()
            self.c.closeApp.connect(self.close)
    
            self.setGeometry(300, 300, 290, 150)
            self.setWindowTitle('Emit signal')
            self.show()
    
    
        def mousePressEvent(self, event):
    
            self.c.closeApp.emit()
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    对话框

    18 对话框(能够输入文字呦呦)

    
    from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit,
        QInputDialog, QApplication)
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.btn = QPushButton('Dialog', self)
            self.btn.move(20, 20)
            self.btn.clicked.connect(self.showDialog)
    
            self.le = QLineEdit(self)
            self.le.move(130, 22)
    
            self.setGeometry(300, 300, 290, 150)
            self.setWindowTitle('Input dialog')
            self.show()
    
    
        def showDialog(self):
    
            text, ok = QInputDialog.getText(self, 'Input Dialog',
                'Enter your name:')
    
            if ok:
                self.le.setText(str(text))
    
            print(text+"哈哈")
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    19 选取颜色(NB坏了)

    
    # 本模块的功能:<QColorDialog提供颜色的选择>
    # TODO 这个厉害,直接调用系统的颜色选择框
    # TODO 强,实在是强
    from PyQt5.QtWidgets import (QWidget, QPushButton, QFrame,
        QColorDialog, QApplication)
    from PyQt5.QtGui import QColor
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            col = QColor(0, 0, 0)
    
            self.btn = QPushButton('Dialog', self)
            self.btn.move(20, 20)
    
            self.btn.clicked.connect(self.showDialog)
    
            self.frm = QFrame(self)
            self.frm.setStyleSheet("QWidget { background-color: %s }"
                % col.name())
            self.frm.setGeometry(130, 22, 100, 100)
    
            self.setGeometry(300, 300, 250, 180)
            self.setWindowTitle('Color dialog')
            self.show()
    
    
        def showDialog(self):
    
            col = QColorDialog.getColor()
    
            if col.isValid():
                self.frm.setStyleSheet("QWidget { background-color: %s }"
                    % col.name())
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    
    

    加油,都看到一半了你!!!

    
    '''
    
           ┌─┐       ┌─┐ + +
        ┌──┘ ┴───────┘ ┴──┐++
        │                 │
        │       ───       │++ + + +
        ███████───███████ │+
        │                 │+
        │       ─┴─       │
        │                 │
        └───┐         ┌───┘
            │         │
            │         │   + +
            │         │
            │         └──────────────┐
            │                        │
            │                        ├─┐
            │                        ┌─┘
            │                        │
            └─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +
              │ ─┤ ─┤       │ ─┤ ─┤
              └──┴──┘       └──┴──┘  + + + +
                     神兽保佑
                    代码无BUG!
    
    
    '''
    
    

    20 选择字体

    
    from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton,
        QSizePolicy, QLabel, QFontDialog, QApplication)
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            vbox = QVBoxLayout()
    
            btn = QPushButton('来来来', self)
            btn.setSizePolicy(QSizePolicy.Fixed,
                QSizePolicy.Fixed)
    
            btn.move(20, 20)
    
            vbox.addWidget(btn)
    
            btn.clicked.connect(self.showDialog)
    
            self.lbl = QLabel('Knowledge only matters', self)
            self.lbl.move(130, 20)
    
            vbox.addWidget(self.lbl)
            self.setLayout(vbox)
    
            self.setGeometry(300, 300, 250, 180)
            self.setWindowTitle('字体目录')
            self.show()
    
    
        def showDialog(self):
    
            font, ok = QFontDialog.getFont()
            if ok:
                self.lbl.setFont(font)
            print('选择的字体是',end="")
            print(font)
            print(type(font))
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    21 选择文件

    
    from PyQt5.QtWidgets import \
        (QMainWindow, QTextEdit, QAction, QFileDialog, QApplication)
    from PyQt5.QtGui import QIcon
    import sys
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.textEdit = QTextEdit()
            self.setCentralWidget(self.textEdit)
            self.statusBar()
    
            openFile = QAction(QIcon('images/open.png'), 'Open', self)
            openFile.setShortcut('Ctrl+O')
            openFile.setStatusTip('打开一个新的文件')
            openFile.triggered.connect(self.showDialog)
    
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('&文件')
            fileMenu.addAction(openFile)
    
            self.setGeometry(300, 300, 350, 300)
            self.setWindowTitle('File dialog')
            self.show()
    
    
        def showDialog(self):
    
            fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')
    
            if fname[0]:
                f = open(fname[0], 'r')
    
                with f:
                    data = f.read()
                    self.textEdit.setText(data)
                    print(data)
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    控件

    22 QCheckBox是啥玩意

    
    from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication
    from PyQt5.QtCore import Qt
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            cb = QCheckBox('改改改', self)
            cb.move(20, 20)
            cb.toggle()
            cb.stateChanged.connect(self.changeTitle)
    
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('真正的标题')
            self.show()
    
    
        def changeTitle(self, state):
    
            if state == Qt.Checked:
                self.setWindowTitle('假装有标题')
            else:
                self.setWindowTitle('没了')
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    23 切换按钮

    
    from PyQt5.QtWidgets import (QWidget, QPushButton,
        QFrame, QApplication)
    from PyQt5.QtGui import QColor
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.col = QColor(0, 0, 0)
    
            redb = QPushButton('Red', self)
            redb.setCheckable(True)
            redb.move(10, 10)
    
            redb.clicked[bool].connect(self.setColor)
    
            greenb = QPushButton('Green', self)
            greenb.setCheckable(True)
            greenb.move(10, 60)
    
            greenb.clicked[bool].connect(self.setColor)
    
            blueb = QPushButton('Blue', self)
            blueb.setCheckable(True)
            blueb.move(10, 110)
    
            blueb.clicked[bool].connect(self.setColor)
    
            self.square = QFrame(self)
            self.square.setGeometry(150, 20, 100, 100)
            self.square.setStyleSheet("QWidget { background-color: %s }" %
                self.col.name())
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('Toggle button')
            self.show()
    
    
        def setColor(self, pressed):
    
            source = self.sender()
    
            if pressed:
                val = 255
            else:
                val = 0
    
            if source.text() == "Red":
                self.col.setRed(val)
            elif source.text() == "Green":
                self.col.setGreen(val)
            else:
                self.col.setBlue(val)
    
            self.square.setStyleSheet("QFrame { background-color: %s }" %
                self.col.name())
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    24 滑块是个好东西

    
    from PyQt5.QtWidgets import (QWidget, QSlider,
                                 QLabel, QApplication)
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import QPixmap
    import sys
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
        def initUI(self):
    
            sld = QSlider(Qt.Horizontal, self)
            sld.setFocusPolicy(Qt.NoFocus)
            sld.setGeometry(30, 40, 100, 30)
            sld.valueChanged[int].connect(self.changeValue)
    
            self.label = QLabel(self)
            self.label.setPixmap(QPixmap('images/logo.png'))
            self.label.setGeometry(160, 40, 80, 30)
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('s什么鸡儿玩意r')
            self.show()
    
        def changeValue(self, value):
    
            if value == 0:
                self.label.setPixmap(QPixmap('images/1.png'))
            elif value > 0 and value <= 30:
                self.label.setPixmap(QPixmap('images/2.png'))
            elif value > 30 and value < 80:
                self.label.setPixmap(QPixmap('images/3.png'))
            else:
                self.label.setPixmap(QPixmap('images/4.png'))
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    
    

    25 进度条

    
    from PyQt5.QtWidgets import (QWidget, QProgressBar,
        QPushButton, QApplication)
    from PyQt5.QtCore import QBasicTimer
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.pbar = QProgressBar(self)
            self.pbar.setGeometry(30, 40, 200, 25)
    
            self.btn = QPushButton('走你', self)
            self.btn.move(40, 80)
            self.btn.clicked.connect(self.doAction)
    
            self.timer = QBasicTimer()
            self.step = 0
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('进度条就比较强了')
            self.show()
    
    
        def timerEvent(self, e):
    
            if self.step >= 200:
                self.timer.stop()
                self.btn.setText('完成吧')
                return
    
            self.step = self.step + 1
            self.pbar.setValue(self.step)
    
        def doAction(self):
    
            if self.timer.isActive():
                self.timer.stop()
                self.btn.setText('走走走')
            else:
                self.timer.start(200, self)
                self.btn.setText('停,呗走了')
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    26 日历

    
    from PyQt5.QtWidgets import (QWidget, QCalendarWidget,
        QLabel, QApplication, QVBoxLayout)
    from PyQt5.QtCore import QDate
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            vbox = QVBoxLayout(self)
    
            cal = QCalendarWidget(self)
            cal.setGridVisible(True)
            cal.clicked[QDate].connect(self.showDate)
    
            vbox.addWidget(cal)
    
            self.lbl = QLabel(self)
            date = cal.selectedDate()
            self.lbl.setText(date.toString())
    
            vbox.addWidget(self.lbl)
    
            self.setLayout(vbox)
    
            self.setGeometry(300, 300, 350, 300)
            self.setWindowTitle('看日历,认准我')
            self.show()
    
    
        def showDate(self, date):
    
            self.lbl.setText(date.toString())
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    27 图片

    
    from PyQt5.QtWidgets import (QWidget, QHBoxLayout,
        QLabel, QApplication)
    from PyQt5.QtGui import QPixmap
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            hbox = QHBoxLayout(self)
            pixmap = QPixmap("images/09f04")
    
            lbl = QLabel(self)
            lbl.setPixmap(pixmap)
    
            hbox.addWidget(lbl)
            self.setLayout(hbox)
    
            self.move(300, 200)
            self.setWindowTitle('Red Rock')
            self.show()
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    28行编辑

    
    import sys
    from PyQt5.QtWidgets import \
        (QWidget, QLabel, QLineEdit, QApplication)
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
        def initUI(self):
            self.lbl = QLabel(self)
            qle = QLineEdit(self)
    
            qle.move(60, 100)
            self.lbl.move(60, 40)
    
            qle.textChanged[str].connect(self.onChanged)
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('QLineEdit')
            self.show()
    
        def onChanged(self, text):
            self.lbl.setText(text)
            self.lbl.adjustSize()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    29 QSplitter是啥玩意呢?

    
    from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,
        QSplitter, QStyleFactory, QApplication)
    from PyQt5.QtCore import Qt
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            hbox = QHBoxLayout(self)
    
            topleft = QFrame(self)
            topleft.setFrameShape(QFrame.StyledPanel)
    
            topright = QFrame(self)
            topright.setFrameShape(QFrame.StyledPanel)
    
            bottom = QFrame(self)
            bottom.setFrameShape(QFrame.StyledPanel)
    
            splitter1 = QSplitter(Qt.Horizontal)
            splitter1.addWidget(topleft)
            splitter1.addWidget(topright)
    
            splitter2 = QSplitter(Qt.Vertical)
            splitter2.addWidget(splitter1)
            splitter2.addWidget(bottom)
    
            hbox.addWidget(splitter2)
            self.setLayout(hbox)
    
            self.setGeometry(300, 300, 400, 300)
            self.setWindowTitle('QSplitter')
            self.show()
    
    
        def onChanged(self, text):
    
            self.lbl.setText(text)
            self.lbl.adjustSize()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    
    

    30 下拉选框

    
    from PyQt5.QtWidgets import (QWidget, QLabel,
        QComboBox, QApplication)
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.lbl = QLabel("Ubuntu", self)
    
            combo = QComboBox(self)
            combo.addItem("Ubuntu")
            combo.addItem("Windows")
            combo.addItem("centos")
            combo.addItem("deepin")
            combo.addItem("redhat")
            combo.addItem("debain")
            combo.move(50, 50)
            self.lbl.move(50, 150)
    
            combo.activated[str].connect(self.onActivated)
    
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('下拉选框练习 ')
            self.show()
    
    
        def onActivated(self, text):
    
            self.lbl.setText(text)
            self.lbl.adjustSize()
    
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
    

    拖拽

    31 简单的拖放

    from PyQt5.QtWidgets import (QPushButton, QWidget,
        QLineEdit, QApplication)
    import sys
    
    class Button(QPushButton):
    
        def __init__(self, title, parent):
            super().__init__(title, parent)
    
            self.setAcceptDrops(True)
    
    
        def dragEnterEvent(self, e):
    
            if e.mimeData().hasFormat('text/plain'):
                e.accept()
            else:
                e.ignore()
    
        def dropEvent(self, e):
    
            self.setText(e.mimeData().text())
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            edit = QLineEdit('', self)
            edit.setDragEnabled(True)
            edit.move(30, 65)
    
            button = Button("Button", self)
            button.move(190, 65)
    
            self.setWindowTitle('Simple drag and drop')
            self.setGeometry(300, 300, 300, 150)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        ex.show()
        app.exec_()
    

    32 拖放按钮组件

    
    from PyQt5.QtWidgets import QPushButton, QWidget, QApplication
    from PyQt5.QtCore import Qt, QMimeData
    from PyQt5.QtGui import QDrag
    import sys
    
    class Button(QPushButton):
    
        def __init__(self, title, parent):
            super().__init__(title, parent)
    
    
        def mouseMoveEvent(self, e):
    
            if e.buttons() != Qt.RightButton:
                return
    
            mimeData = QMimeData()
    
            drag = QDrag(self)
            drag.setMimeData(mimeData)
            drag.setHotSpot(e.pos() - self.rect().topLeft())
    
            dropAction = drag.exec_(Qt.MoveAction)
    
    
        def mousePressEvent(self, e):
    
            super().mousePressEvent(e)
    
            if e.button() == Qt.LeftButton:
                print('按我嘎哈')
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setAcceptDrops(True)
    
            self.button = Button('来吧!!!', self)
            self.button.move(100, 65)
    
            self.setWindowTitle('点击还能挪')
            self.setGeometry(300, 300, 280, 150)
    
    
        def dragEnterEvent(self, e):
    
            e.accept()
    
    
        def dropEvent(self, e):
    
            position = e.pos()
            self.button.move(position)
    
            e.setDropAction(Qt.MoveAction)
            e.accept()
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        ex.show()
        app.exec_()
    """
    拖拽
    在GUI里,拖放是指用户点击一个虚拟的对象,拖动,然后放置到另外一个对象上面的动作。
    一般情况下,需要调用很多动作和方法,创建很多变量。
    拖放能让用户很直观的操作很复杂的逻辑。
    一般情况下,我们可以拖放两种东西:数据和图形界面。
    把一个图像从一个应用拖放到另外一个应用上的实质是操作二进制数据。
    把一个表格从Firefox上拖放到另外一个位置 的实质是操作一个图形组。
    """
    

    绘图

    33 文本的涂鸦(这个好玩哈)

    
    import sys
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QColor, QFont
    from PyQt5.QtCore import Qt
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.text = "涂鸦要涂的有灵魂"
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('绘画板')
            self.show()
    
    
        def paintEvent(self, event):
    
            qp = QPainter()
            qp.begin(self)
            self.drawText(event, qp,168, 34, 243)
            qp.end()
    
            # qp1 = QPainter()
            # qp1.begin(self)
            # self.drawText(event, qp1,168, 34, 23)
            # qp1.end()
    
    
        def drawText(self, event, qp, r,g,b):
    
            qp.setPen(QColor(r,g,b))
            qp.setFont(QFont('微软雅黑', 15))
            qp.drawText(event.rect(), Qt.AlignCenter, self.text)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    34 点的绘画

    
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter
    from PyQt5.QtCore import Qt
    import sys, random
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setGeometry(300, 300, 300, 190)
            self.setWindowTitle('一大堆点点儿')
            self.show()
    
    
        def paintEvent(self, e):
    
            qp = QPainter()
            qp.begin(self)
            self.drawPoints(qp)
            qp.end()
    
    
        def drawPoints(self, qp):
    
            qp.setPen(Qt.red)
            size = self.size()
    
            for i in range(1000):
                x = random.randint(1, size.width()-1)
                y = random.randint(1, size.height()-1)
                qp.drawPoint(x, y)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    35 颜色

    
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QColor, QBrush
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setGeometry(300, 300, 350, 100)
            self.setWindowTitle('Colours')
            self.show()
    
    
        def paintEvent(self, e):
    
            qp = QPainter()
            qp.begin(self)
            self.drawRectangles(qp)
            qp.end()
    
    
        def drawRectangles(self, qp):
    
            col = QColor(0, 0, 0)
            col.setNamedColor('#d4d4d4')
            qp.setPen(col)
    
            qp.setBrush(QColor(200, 0, 0))
            qp.drawRect(10, 15, 90, 60)
    
            qp.setBrush(QColor(255, 80, 0, 160))
            qp.drawRect(130, 15, 90, 60)
    
            qp.setBrush(QColor(25, 0, 90, 200))
            qp.drawRect(250, 15, 90, 60)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    36 QPen是笔么

    
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QPen
    from PyQt5.QtCore import Qt
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setGeometry(300, 300, 280, 270)
            self.setWindowTitle('Pen styles')
            self.show()
    
    
        def paintEvent(self, e):
    
            qp = QPainter()
            qp.begin(self)
            self.drawLines(qp)
            qp.end()
    
    
        def drawLines(self, qp):
    
            pen = QPen(Qt.black, 2, Qt.SolidLine)
    
            qp.setPen(pen)
            qp.drawLine(20, 40, 250, 40)
    
            pen.setStyle(Qt.DashLine)
            qp.setPen(pen)
            qp.drawLine(20, 80, 250, 80)
    
            pen.setStyle(Qt.DashDotLine)
            qp.setPen(pen)
            qp.drawLine(20, 120, 250, 120)
    
            pen.setStyle(Qt.DotLine)
            qp.setPen(pen)
            qp.drawLine(20, 160, 250, 160)
    
            pen.setStyle(Qt.DashDotDotLine)
            qp.setPen(pen)
            qp.drawLine(20, 200, 250, 200)
    
            pen.setStyle(Qt.CustomDashLine)
            pen.setDashPattern([1, 4, 5, 4])
            qp.setPen(pen)
            qp.drawLine(20, 240, 250, 240)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    37 QBrush是啥?

    
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QBrush
    from PyQt5.QtCore import Qt
    import sys
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setGeometry(300, 300, 355, 280)
            self.setWindowTitle('Brushes')
            self.show()
    
    
        def paintEvent(self, e):
    
            qp = QPainter()
            qp.begin(self)
            self.drawBrushes(qp)
            qp.end()
    
    
        def drawBrushes(self, qp):
    
            brush = QBrush(Qt.SolidPattern)
            qp.setBrush(brush)
            qp.drawRect(10, 15, 90, 60)
    
            brush.setStyle(Qt.Dense1Pattern)
            qp.setBrush(brush)
            qp.drawRect(130, 15, 90, 60)
    
            brush.setStyle(Qt.Dense2Pattern)
            qp.setBrush(brush)
            qp.drawRect(250, 15, 90, 60)
    
            brush.setStyle(Qt.DiagCrossPattern)
            qp.setBrush(brush)
            qp.drawRect(10, 105, 90, 60)
    
            brush.setStyle(Qt.Dense5Pattern)
            qp.setBrush(brush)
            qp.drawRect(130, 105, 90, 60)
    
            brush.setStyle(Qt.Dense6Pattern)
            qp.setBrush(brush)
            qp.drawRect(250, 105, 90, 60)
    
            brush.setStyle(Qt.HorPattern)
            qp.setBrush(brush)
            qp.drawRect(10, 195, 90, 60)
    
            brush.setStyle(Qt.VerPattern)
            qp.setBrush(brush)
            qp.drawRect(130, 195, 90, 60)
    
            brush.setStyle(Qt.BDiagPattern)
            qp.setBrush(brush)
            qp.drawRect(250, 195, 90, 60)
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    38 贝赛尔曲线(这个学过PS的都知道)

    
    from PyQt5.QtWidgets import QWidget, QApplication
    from PyQt5.QtGui import QPainter, QPainterPath
    from PyQt5.QtCore import Qt
    import sys
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
        def initUI(self):
            # 用QPainterPath路径创建贝塞尔曲线。
            # 使用cubicTo()方法生成,分别需要三个点:起始点,控制点和终止点。
            self.setGeometry(300, 300, 380, 250)
            self.setWindowTitle('绘制贝塞尔曲线')
            self.show()
    
        def paintEvent(self, e):
            qp = QPainter()
            qp.begin(self)
            qp.setRenderHint(QPainter.Antialiasing)
            self.drawBezierCurve(qp)
            qp.end()
    
        def drawBezierCurve(self, qp):
            path = QPainterPath()
            path.moveTo(30, 30)
            path.cubicTo(30, 30, 350, 30, 200, 150)
    
            qp.drawPath(path)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    
    

    自定义组件

    39

    
    from PyQt5.QtWidgets import (QWidget, QSlider, QApplication,
        QHBoxLayout, QVBoxLayout)
    from PyQt5.QtCore import QObject, Qt, pyqtSignal
    from PyQt5.QtGui import QPainter, QFont, QColor, QPen
    import sys
    
    class Communicate(QObject):
    
        updateBW = pyqtSignal(int)
    
    
    class BurningWidget(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            self.setMinimumSize(1, 30)
            self.value = 75
            self.num = [75, 150, 225, 300, 375, 450, 525, 600, 675]
    
    
        def setValue(self, value):
    
            self.value = value
    
    
        def paintEvent(self, e):
    
            qp = QPainter()
            qp.begin(self)
            self.drawWidget(qp)
            qp.end()
    
    
        def drawWidget(self, qp):
    
            MAX_CAPACITY = 700
            OVER_CAPACITY = 750
    
            font = QFont('Serif', 7, QFont.Light)
            qp.setFont(font)
    
            size = self.size()
            w = size.width()
            h = size.height()
    
            step = int(round(w / 10))
    
    
            till = int(((w / OVER_CAPACITY) * self.value))
            full = int(((w / OVER_CAPACITY) * MAX_CAPACITY))
    
            if self.value >= MAX_CAPACITY:
    
                qp.setPen(QColor(255, 255, 255))
                qp.setBrush(QColor(255, 255, 184))
                qp.drawRect(0, 0, full, h)
                qp.setPen(QColor(255, 175, 175))
                qp.setBrush(QColor(255, 175, 175))
                qp.drawRect(full, 0, till-full, h)
    
            else:
    
                qp.setPen(QColor(255, 255, 255))
                qp.setBrush(QColor(255, 255, 184))
                qp.drawRect(0, 0, till, h)
    
    
            pen = QPen(QColor(20, 20, 20), 1,
                Qt.SolidLine)
    
            qp.setPen(pen)
            qp.setBrush(Qt.NoBrush)
            qp.drawRect(0, 0, w-1, h-1)
    
            j = 0
    
            for i in range(step, 10*step, step):
    
                qp.drawLine(i, 0, i, 5)
                metrics = qp.fontMetrics()
                fw = metrics.width(str(self.num[j]))
                qp.drawText(i-fw/2, h/2, str(self.num[j]))
                j = j + 1
    
    
    class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.initUI()
    
    
        def initUI(self):
    
            OVER_CAPACITY = 750
    
            sld = QSlider(Qt.Horizontal, self)
            sld.setFocusPolicy(Qt.NoFocus)
            sld.setRange(1, OVER_CAPACITY)
            sld.setValue(75)
            sld.setGeometry(30, 40, 150, 30)
    
            self.c = Communicate()
            self.wid = BurningWidget()
            self.c.updateBW[int].connect(self.wid.setValue)
    
            sld.valueChanged[int].connect(self.changeValue)
            hbox = QHBoxLayout()
            hbox.addWidget(self.wid)
            vbox = QVBoxLayout()
            vbox.addStretch(1)
            vbox.addLayout(hbox)
            self.setLayout(vbox)
    
            self.setGeometry(300, 300, 390, 210)
            self.setWindowTitle('Burning widget')
            self.show()
    
    
        def changeValue(self, value):
    
            self.c.updateBW.emit(value)
            self.wid.repaint()
    
    
    if __name__ == '__main__':
    
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    

    终于翻到底部了,能看到这里,给你自己一个奖励吧!!!

    
    '''
    
           ┌─┐       ┌─┐ + +
        ┌──┘ ┴───────┘ ┴──┐++
        │                 │
        │       ───       │++ + + +
        ███████───███████ │+
        │                 │+
        │       ─┴─       │
        │                 │
        └───┐         ┌───┘
            │         │
            │         │   + +
            │         │
            │         └──────────────┐
            │                        │
            │                        ├─┐
            │                        ┌─┘
            │                        │
            └─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +
              │ ─┤ ─┤       │ ─┤ ─┤
              └──┴──┘       └──┴──┘  + + + +
                     神兽保佑
                    代码无BUG!
    
    
    '''
    
    
    展开全文
  • PyQt5案例(1)

    2021-08-12 17:57:03
    都在PyQt5.QtWidgets。 from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": # 创建 QApplication 的实例 app = QApplication(sys.argv) # 创建一个窗口 win = QWidget() # 设置

    基于python写一个小的窗口

    import sys
    # 必须使用两个类:QApplication和QWidget。都在PyQt5.QtWidgets。
    from PyQt5.QtWidgets import QApplication, QWidget
    
    if __name__ == "__main__":
        # 创建 QApplication 的实例 
        app = QApplication(sys.argv)
        # 创建一个窗口
        win = QWidget()
        # 设置窗口的大小
        win.resize(450, 450)
        # 设置窗口在屏幕的坐标
        win.move(500, 500)
        # 设置窗口的标题
        win.setWindowTitle("我的第一个桌面应用")
        # 显示窗口
        win.show()
    
        # 进入程序的主循环, 并通过exit()函数确保主循环安全结束
        sys.exit(app.exec_())
    

    图片:
    在这里插入图片描述

    让用户输入一段文本包含:员工姓名、薪资、年龄。
    该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。
    当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。

    # 让用户输入一段文本包含:员工姓名、薪资、年龄。
    # 该程序可以把薪资在 2万 以上、以下的人员名单分别打印出来。
    # 当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。
    
    from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QMessageBox
    
    class Stats():
        def __init__(self):
            # 创建窗口
            self.window = QMainWindow()
            # 窗口的大小
            self.window.resize(500, 400)
            # 窗口的坐标
            self.window.move(300, 310)
            # 标题
            self.window.setWindowTitle("薪资统计")
    
            # 窗口里文本编辑的部分    基于窗口
            self.textEidt = QPlainTextEdit(self.window)
            # 用户没输入数据时显示, 输入数据后覆盖
            self.textEidt.setPlaceholderText("请输入薪资表")
            self.textEidt.move(10, 25)
            self.textEidt.resize(300, 350)
    
            # 按键统计部分
            self.button = QPushButton("统计", self.window)
            self.button.move(380, 80)  # 该坐标基于 window控件
            # 将按键与程序连接起来 如果该键被按下 执行handleCalc函数
            self.button.clicked.connect(self.handleCalc)
    
        def handleCalc(self):
            info = self.textEidt.toPlainText()  # 接收数据
            # 名单
            hsalary = ''  # 高于2万
            lsalary = ''  # 低于2万
            # 以换行符作为分隔符来分割字符串,并返回数组
            for item in info.splitlines():  # 以换行符分割字符串
                # 去除首位空格
                if not item.strip():  # strip() 函数移除字符串头尾指定的字符(默认为空格或换行符)或字符序列  str.strip( '0' ); # 去除首尾字符 0
                    continue  # 该方法只能删除开头或是结尾的字符,不能删除中间部分的字符
                # split() :通过指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格
                parts = item.split(' ')  # 以空格为界 分割  去掉列表中空格
    
                parts = [i for i in parts if i]  # 列表推导式 parts非空字符
                name, salary, age = parts
                if int(salary) >= 20000:
                    hsalary += name + '\n'
                else:
                    lsalary += name + '\n'
    
            # 弹出对话框
            QMessageBox.about(self.window,
                              '统计结果',
                              f'''薪资20000 以上的有:\n{hsalary}
                            \n薪资20000 以下的有:\n{lsalary}'''
                              )
    
    # QApplication 提供了整个图形界面程序的底层管理功能  必须在任何界面控件对象创建前
    app = QApplication([])
    stats = Stats()
    stats.window.show()
    # 进入QApplication的事件处理循环,接收用户的输入事件(),并且分配给相应的对象去处理。
    app.exec_()
    

    在这里插入图片描述
    简单介绍:
    第一个用PyQt5写的,第二个用Pyside2 这两个都差不多,第二个是18年官方才推出来的
    QApplication 提供了整个图形界面程序的底层管理功能,比如:
    初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,我们必须在任何界面控件对象创建前,先创建它。
    QMainWindow、QPlainTextEdit、QPushButton ,QMainWindow是4个控件类,分别对应界面的主窗口、文本框、按钮,弹窗他们都是控件基类对象QWidget的子类。
    要在界面上 创建一个控件 ,就需要在程序代码中 创建 这个 控件对应类 的一个 实例对象
    在 Qt 系统中,控件(widget)是 层层嵌套 的,除了最顶层的控件,其他的控件都有父控件。QPlainTextEdit、QPushButton 实例化时,都有一个参数window(主窗口实例化对象,父控件对象)

    		# 创建窗口
            self.window = QMainWindow()
            # 窗口里文本编辑的部分    基于窗口
            self.textEidt = QPlainTextEdit(self.window)
             # 按键统计部分
            self.button = QPushButton("统计", self.window)
    

    界面动作处理 (signal 和 slot)
    当用户点击 统计 按钮时, 从界面控件 QPlainTextEdit 里面获取 用户输入的字符串内容,进行处理。首先第一个问题: 用户点击了 统计 按钮,怎么通知程序? 因为只有程序被通知了这个点击,才能做出相应的处理。

    在 Qt 系统中, 当界面上一个控件被操作时,比如 被点击、被输入文本、被鼠标拖拽等, 就会发出 信号 ,英文叫 signal 。就是表明一个事件(比如被点击、被输入文本)发生了。
    我们可以预先在代码中指定 处理这个 signal 的函数,这个处理 signal 的函数 叫做 slot 。
    比如,我们可以像下面这样定义一个函数

    def handleCalc():
        print('统计按钮被点击了')
    
    

    如果 发生了button 按钮被点击 的事情,需要让 handleCalc 来处理

    		 # 将按键与程序连接起来 如果该键被按下 执行handleCalc函数
            self.button.clicked.connect(self.handleCalc)
    

    把 button 被 点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上,大白话就是:让 handleCalc 来 处理 button 被 点击的操作。

    展开全文
  • 非常好的github上关于pyqt5的示例代码,只要你pip insatall pyqt5之后,就能直接运行
  • 项目实战:实现绘图应用 的案例 需要解决3个核心内容 1.如何绘图 在paintEvent方法中绘图,通过调用update方法出发painEvent的条用 2.在哪里绘图 在白色北京的QPixmap对象中绘图 3.如何通过移动鼠标进行绘图 ...

    项目实战:实现绘图应用 的案例

    需要解决3个核心内容
    1.如何绘图

    在paintEvent方法中绘图,通过调用update方法出发painEvent的条用

    2.在哪里绘图

    在白色北京的QPixmap对象中绘图

    3.如何通过移动鼠标进行绘图

    鼠标拥有3个事件:
    (1) 鼠标按下 mousePressEvent
    (2) 鼠标移动 mouseMoveEvent
    (3) 鼠标抬起 mouseReleaseEvent

    
    '''
    项目实战:实现绘图应用 的案例
    
    需要解决3个核心内容
    1.如何绘图
    
    在paintEvent方法中绘图,通过调用update方法出发painEvent的条用
    
    2.在哪里绘图
    
    在白色北京的QPixmap对象中绘图
    
    3.如何通过移动鼠标进行绘图
    
    鼠标拥有3个事件:
    (1) 鼠标按下 mousePressEvent
    (2) 鼠标移动 mouseMoveEvent
    (3) 鼠标抬起 mouseReleaseEvent
    
    '''
    import sys
    
    from PyQt5.QtCore import Qt, QPoint
    from PyQt5.QtGui import QIcon, QPixmap, QPainter
    from PyQt5.QtWidgets import QWidget, QLineEdit, QPushButton, QGridLayout, QDialog, QApplication, QMainWindow, \
        QVBoxLayout
    
    
    class DrawingDemo(QWidget):
        def __init__(self,parent=None):
            super(DrawingDemo,self).__init__(parent)
            # 设置窗口标题
            self.setWindowTitle('绘图应用 的演示')
    
            self.pix = QPixmap()
            self.lastPoint = QPoint()
            self.endPoint = QPoint()
            self.initUI()
    
        def initUI(self):
            # 设置定位和左上角坐标
            self.resize(600,600)
            # 画布大小为400*400 , 背景为白色
            self.pix = QPixmap(600,600)
            self.pix.fill(Qt.white)
    
        def paintEvent(self, event):
            pp = QPainter(self.pix)
            # 根据鼠标指针前后两个位置绘制直线
            pp.drawLine(self.lastPoint,self.endPoint)
    
            # 让前一个坐标等于后一个坐标值
            # 这样就能实现出连续的线
            self.lastPoint = self.endPoint
            painter = QPainter(self)
            painter.drawPixmap(0,0,self.pix)
    
        def mousePressEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.lastPoint = event.pos()
    
        def mouseMoveEvent(self, event):
            if event.buttons() and Qt.LeftButton:
                self.endPoint = event.pos()
                self.update()
    
        def mouseReleaseEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.endPoint = event.pos()
    
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        # 设置应用图标
        app.setWindowIcon(QIcon('../web.ico'))
        w = DrawingDemo()
        w.show()
        sys.exit(app.exec_())
    

    展开全文
  • 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。不跳过一个细节,不漏掉一行代码,不省略一个例图。 本系列从软件安装、环境配置开始,介绍了基本应用:菜单和工具栏、基本控件,...
  • PyQt5 简单范例

    2022-05-11 15:45:04
    PyQt5 简介 PyQt 是一套 Python 基于 Qt 应用框架的模块,Qt 是 1991 年由 Qt Company 开发的跨平台 C++ 图形用户界面 (GUI) 应用程序开发框架。PyQt 是由英国的 Riverbank Computing Limited 公司所开发 ...
  • PyQt5结合Socket聊天室功能开发,项目中使用线程进行不同任务处理,是学习Scoket及线程非常好的案例
  • PyQt5实用案例

    2020-11-19 16:27:30
    记录项目中用到的PyQt5的一些方法,我会尽量把场景讲清楚,以便于有需要的直接使用 # 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 ...
  • 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。 什么叫从零开始?从软件安装、环境配置开始。不跳过一个细节,不漏掉一行代码,不省略一个例图。 本文详细解读通过 QtDesigner ...
  • 本门课程需要有python基础,从零基础带大家学习pyhon gui 编程,从界面设计到 初级控件,高级控件,信号和槽,事件,数据库,pyqt matplotlib来学习pyqt5.非常丰富的项目实战案例,股票看板,视频播放器,音乐播放器员工管理...
  • Python 小白从零开始 PyQt5 项目实战(6)切换窗口的堆叠布局 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。 软件项目中经常需要多种不同的图形界面,以适应不同的任务场景。堆...
  • PyQt5 快速开发 - 学生管理系统项目实战报告

    千次阅读 多人点赞 2022-01-01 12:38:33
    PyQt5 快速开发 - 学生管理系统项目实战报告
  • Python 小白从零开始 PyQt5 项目实战(5)布局管理

    千次阅读 多人点赞 2021-10-12 19:55:45
    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。 什么叫从零开始?从软件安装、环境配置开始。不跳过一个细节,不漏掉一行代码,不省略一个例图。 布局管理就是管理图形窗口中...
  • 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。 折叠侧边栏是指可折叠的多级菜单式状态栏,位于于窗口的左右侧边,可以实现软件功能或目录的导航。 本文详细介绍用 QTreeWidget ...
  • 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5项目实战。 什么叫从零开始?从软件安装、环境配置开始。不跳过一个细节,不漏掉一行代码,不省略一个例图。 本文讲解信号与槽的连接机制,...
  • pyqt5 参考代码 github 参考项目

    千次阅读 2020-04-25 23:05:50
    QT项目开发手记——一个好看的loading界面 Qt界面开发(三) (很多开源的QT例子) https://blog.csdn.net/ZhangXiaoyu_sy/article/details/87297696 这次要给大家分享一些我在github和qtcn(主要是l...
  • PyQt5 开发注册、登陆和功能界面案例与知识点梳理

    千次阅读 多人点赞 2020-07-20 17:40:07
    最近在学习 PyQt5 GUI 编程,大致路线是找了套网课《撩课-Python-GUI编程-PyQt5》,以梳理思维导图的形式梳理了下基础知识点以及 QtDesigner 应用流程,跳过各种具体控件的细节,结合课程中具体的综合案例来进行具体...
  • python项目开发实战_AI人脸识别签到打卡系统(PyQt5+百度智能云+OpenCV-Python+SQLite3)_编程案例实例教程
  • 直接点击事件addAction本节知识视频教程以下开始文字讲解:一、案例:登录窗体1.实现窗体的加载(有图标)2.用户名和密码的登录框3.能够将用户名和密码获取过来二、开发过程提问:开发思路中需要加载什么?1.加载窗体...
  • PyQt5 + Pycharm环境搭建文章目录python安装及环境配置Pyqt5环境搭建合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、...
  • python pyqt5 多线程池的使用案例

    千次阅读 2019-02-24 05:57:21
    python pyqt5 多线程池的使用案例说明 说明 本代码来源于一个项目中的一部分,这里只展示了多线程部分 使用线程池进行网络的一些操作 # -*- coding: utf-8 -*- """ 登陆模块多线程 ""&...
  • PyQt5简单的例子

    2021-01-15 10:17:03
    基本控件位于pyqt5.qtwidgets模块中。 from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': # 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数...
  • 基于PyQt5的学生信息管理系统

    千次阅读 2021-12-20 21:48:53
    本文是基于PyQt5的学生信息管理系统,实现了对MySQL数据库中学生信息的增删改查以及提取保存为excel文档。
  • 文章适合yolov5 pyqt5快速入门。 本项目适合交大作业的小伙伴们~ 稍加改动可作为 ,计算机毕业设计项目
  • 项目A--pyqt5 多窗口笔记

    千次阅读 2022-01-04 13:18:43
    一、已知的多页面存放方式 目前正在做的pyqt5项目,需要多个页面,那么这多个页面以什么形式放在一起呢?可选择的方案很多,我个人知道的有: 1、使用Tab Widget,形如下图: 2、使用Stacked Widget 就是同一个位置...
  • 本文简单介绍了PyCharm中PyQt5的配置与简单使用
  • PyQt5踩坑篇

    2021-07-03 22:04:40
    PyQt5系列教程(一) 前言 主要记录Pyqt的踩坑之路,本文主要介绍利用工具QtDesigner来完成UI界面的设技 软硬件环境: windows 10 64bit Miniconda with Python 3.7.1 PyQt5 PyCharm 2018.3 PS:最新的也适用,差别不大 ...
  • PyQt5安装失败总结

    千次阅读 2022-05-13 19:38:01
    直接使用pip安装,但是需要SIP的支持,所以先安装SIP,再安装pyqt5 pip install sip pip install PyQt5 安装qt designer 同样使用pip安装 pip install PyQt5-tools 失败案例 于是换了一种思路,直接在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,150
精华内容 460
关键字:

pyqt5项目案例

友情链接: arm_ucos_110.rar