Python:学习笔记之PyQt5
发布日期:2021-06-30 15:42:09 浏览次数:3 分类:技术文章

本文共 42249 字,大约阅读时间需要 140 分钟。

补一下之前PyQt敲的代码作为笔记

简单的窗口

import sysfrom PyQt5.QtWidgets import QApplication, QWidget# 这句代码的作用是判断当前文件是否为主文件# 如果不是主文件,则其下面的内容不被执行if __name__ == '__main__':    #创建应用对象    app = QApplication(sys.argv)    # QWidge控件是一个用户界面的基本控件,它提供了基本的应用构造器。    # 默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window)。    w = QWidget()    # resize()方法改变窗口大小,宽度500,高度300    w.resize(250, 150)    # 设置窗口位置(针对屏幕左上角)    w.move(300, 300)    # 给窗口添加标题    w.setWindowTitle('simple')    # 显示    w.show()    # sys.exit()方法能确保主循环安全退出。外部环境能通知主控件怎么结束。    sys.exit(app.exec_())

简单的窗口

带图标的窗口

import sysfrom PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5.QtGui import QIcon# 面向对象编程最重要的三个部分是类(class)、数据和方法。# 我们创建了一个类的调用,这个类继承自QWidget。# 这就意味着,我们调用了两个构造器,一个是这个类本身的,一个是这个类继承的。# super()构造器方法返回父级的对象。__init__()方法是构造器的一个方法。# 构造器作为一种方法,负责类中成员变量(域)的初始化class Example(QWidget):    def __init__(self):        super().__init__()        # 使用init_ui()方法创建一个GUI        self.init_ui()    def init_ui(self):        """        setGeometry()        把窗口放到屏幕上并且设置窗口大小。        参数分别代表屏幕坐标的x、y和窗口大小的宽、高。        也就是说这个方法是resize()和move()的合体。        """        self.setGeometry(300, 300, 300, 220)        self.setWindowTitle('Icon')        # 添加图标        # 先创建一个QIcon对象,接收一个路径作为参数显示图标        self.setWindowIcon(QIcon('web.png'))        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

带图标的窗口

提示窗

import sysfrom PyQt5.QtWidgets import QWidget, QToolTip, QPushButton, QApplicationfrom PyQt5.QtGui import QFontclass Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 为应用创建一个提示框        # 设置提示框的字体,使用10px的SansSerif字体        QToolTip.setFont(QFont('SansSerif', 10))        # 调用setToolTip()创建提示框可以使用富文本格式的内容        self.setToolTip('This is a QWidget widget')        # 创建一个按钮,并且为按钮添加了一个提示框        btn = QPushButton('Button',self)        btn.setToolTip('This is a QPushButton widget')        # 调整按钮的宽度,并让按钮再屏幕上显示出来        # sizeHint()方法提供了一个默认的按钮大小。        btn.resize(btn.sizeHint())        btn.move(50, 50)        self.setGeometry(300, 300, 300, 300)        self.setWindowTitle('Tooltips')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

提示窗

#关闭窗口

# 创建一个点击之后就退出窗口的按钮import sysfrom PyQt5.QtWidgets import QWidget, QPushButton, QApplication# 需要QtCore对象from PyQt5.QtCore import QCoreApplicationclass Example(QWidget):    def __init__(self)      :        super().__init__()        self.init_ui()    def init_ui(self):        """        创建一个继承自QPushButton的按钮。        第一个参数是按钮的文本,第二个参数是按钮的父级组件,        这个例子中,父级组件就是我们创建的继承自Qwidget的Example类。        """        qbtn = QPushButton('Quit',self)        qbtn.clicked.connect(QCoreApplication.instance().quit)        # resize设置控件的宽和高        qbtn.resize(250, 150)        qbtn.move(50, 50)        self.setGeometry(300, 300, 500, 300)        self.setWindowTitle('Quit Button')        self.show()        """ 事件传递系统在PyQt5内建的single和slot机制里面。        点击按钮之后,信号会被捕捉并给出既定的反应。        QCoreApplication包含了事件的主循环,它能添加和删除所有的事件,        instance()创建了一个它的实例。        QCoreApplication是在QApplication里创建的。        点击事件和能终止进程并退出应用的quit函数绑定在了一起。         在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。"""if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

关闭窗口

消息盒子

import sysfrom PyQt5.QtWidgets import QWidget, QMessageBox, QApplication"""如果关闭QWidget,就会产生一个QCloseEvent,并且把它传入到closeEvent函数的event参数中。改变控件的默认行为,就是替换掉默认的事件处理。"""class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Message box')        self.show()    def closeEvent(self, event):        """        我们创建了一个消息框,上面有俩按钮:Yes和No.        第一个字符串显示在消息框的标题栏,        第二个字符串显示在对话框,        第三个参数是消息框的俩按钮,        最后一个参数是默认按钮,这个按钮是默认选中的。        返回值在变量reply里。        """        reply = QMessageBox.question(self, 'Message',                                     "Are you sure to quit?", QMessageBox.Yes |                                     QMessageBox.No, QMessageBox.No)        # 这里判断返回值,如果点击的是Yes按钮,我们就关闭组件和应用,否者就忽略关闭事件。        if reply == QMessageBox.Yes:            event.accept()        else:            event.ignore()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

消息盒子

窗口居中

import sysfrom PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication# QtGui.QDesktopWidget提供了用户的桌面信息,包括屏幕的大小。class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        self.resize(250, 150)        # 这个方法是调用我们下面写的,实现对话框居中的方法。        self.center()        self.setWindowTitle('Center')        self.show()    def center(self):        # 获得主窗口所在的框架。        qr = self.frameGeometry()        # 获取显示器的分辨率,然后得到屏幕中间点的位置。        cp = QDesktopWidget().availableGeometry().center()        # 然后通过move函数把主窗口的左上角移动到其框架的左上角,这样就把窗口居中了。        qr.moveCenter(cp)        self.move(qr.topLeft())if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

屏幕居中

窗口居中

状态栏

import sysfrom PyQt5.QtWidgets import QMainWindow, QApplication#状态栏是由QMainWindow创建的class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 调用QtGui.QMainWindow类的statusBar()方法,创建状态栏。        # 第一次调用创建一个状态栏,返回一个状态栏对象。        # showMessage()方法在状态栏上显示一条信息。        self.statusBar`在这里插入代码片`().showMessage('Ready')        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Statusbar')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

状态栏

菜单栏

import sysfrom PyQt5.QtWidgets import QMainWindow, QApplication, QAction, qAppfrom PyQt5.QtGui import QIcon"""我们创建了只有一个命令的菜单栏,这个命令就是终止应用同时也创建了一个状态栏。而且还能使用快捷键Ctrl+Q退出应用。"""class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        """        QAction是菜单栏、工具栏或者快捷键的动作的组合。        前面两行,我们创建了一个图标、一个exit的标签和一个快捷键组合,都执行了一个动作。        第三行,创建了一个状态栏,当鼠标悬停在菜单栏的时候,能显示当前状态。        """        exitAct = QAction(QIcon('quit.png'), '&Exit', self)        exitAct.setShortcut('Ctrl+Q')        exitAct.setStatusTip('Exit Application')        # 当执行这个指定的动作时,就触发了一个事件。        # 这个事件跟QApplication的quit()行为相关联,所以这个动作就能终止这个应用。        exitAct.triggered.connect(qApp.quit)        self.statusBar()        # menuBar()创建菜单栏。        # 这里创建了一个菜单栏,并在上面添加了一个file菜单,并关联了点击退出应用的事件。        menubar = self.menuBar()        fileMenu = menubar.addMenu('&File')        fileMenu.addAction(exitAct)        self.setGeometry(300, 300, 300, 200)        self.setWindowTitle('Simple menu')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

菜单栏

子菜单

import sysfrom PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication# 这个例子里,有两个子菜单,一个在file菜单下面,一个在file的import下面。class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        menubar = self.menuBar()        fileMenu = menubar.addMenu('File')        # 使用QMenu创建一个新菜单。        impMenu = QMenu('Import', self)        impAct = QAction('Import mail', self)        # 使用addAction添加一个动作。        impMenu.addAction(impAct)        newAct = QAction('New', self)        fileMenu.addAction(newAct)        fileMenu.addMenu(impMenu)        self.setGeometry(300, 300, 300, 200)        self.setWindowTitle('Submenu')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

子菜单

勾选菜单

import sysfrom PyQt5.QtWidgets import QMainWindow, QAction, QApplication# 本例创建了一个行为菜单。这个行为/动作能切换状态栏显示或者隐藏。class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        self.statusbar = self.statusBar()        self.statusbar.showMessage('Ready')        menubar = self.menuBar()        # 用checkable选项创建一个能选中的菜单。        viewMenu = menubar.addMenu('View')        # viewMenu2 = menubar.addMenu('View2') 可以参加第二个菜单        viewStatAct = QAction('View statusbar', self, checkable=True)        viewStatAct.setStatusTip('View statusbar')        # 默认设置为选中状态。        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()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

勾选菜单1

勾选菜单2

右键菜单

import sysfrom PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication# 使用contextMenuEvent()方法实现这个菜单。class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        self.setGeometry(300, 300, 300, 200)        self.setWindowTitle('Context menu')        self.show()    def contextMenuEvent(self, event):        # QMenu创建菜单        cmenu = QMenu(self)        newAct = cmenu.addAction("New")        opnAct = cmenu.addAction("Open")        quitAct = cmenu.addAction("Quit")        # 使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。        # mapToGlobal()方法把当前组件的相对坐标转换为窗口(window)的绝对坐标。        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_())

右键菜单

工具栏

import sysfrom PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplicationfrom PyQt5.QtGui import QIcon# 创建了一个工具栏。这个工具栏只有一个退出应用的动作。class Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        exitAct = QAction(QIcon('quit(2).png'), 'Exit', self)        exitAct.setShortcut('Ctrl+Q')        exitAct.triggered.connect(qApp.quit)        self.toolbar = self.addToolBar('Exit')        self.toolbar.addAction(exitAct)        self.setGeometry(300, 300, 300, 200)        self.setWindowTitle('Toolbar')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

工具栏

主窗口

import sysfrom PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplicationfrom PyQt5.QtGui import QIconclass Example(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        textEdit = QTextEdit()        self.setCentralWidget(textEdit)        exitAct = QAction(QIcon('quit(2).png'), 'Exit', self)        exitAct.setShortcut('Ctrl+Q')        # 设置状态栏        exitAct.setStatusTip('Exit application')        exitAct.triggered.connect(self.close)        self.statusBar()        menubar = self.menuBar()        fileMenu = menubar.addMenu('&File')        fileMenu.addAction(exitAct)        toolbar = self.addToolBar('Exit')        toolbar.addAction(exitAct)        self.setGeometry(300, 300, 350, 250)        self.setWindowTitle('Main window')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

主窗口

绝对定位

import sysfrom PyQt5.QtWidgets import QWidget, QLabel, QApplication# 我们使用move()方法定位了每一个元素,使用x、y坐标。x、y坐标的原点是程序的左上角。class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 这个元素的左上角就在这个程序的左上角开始的(15, 10)的位置。        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()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

绝对定位

盒布局

import sysfrom PyQt5.QtWidgets import (QWidget, QPushButton,    QHBoxLayout, QVBoxLayout, QApplication)# 上面的例子完成了在应用的右下角放了两个按钮的需求。# 当改变窗口大小的时候,它们能依然保持在相对的位置。# 我们同时使用了QHBoxLayout和QVBoxLayout。class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 这是创建了两个按钮。        okButton = QPushButton("OK")        cancelButton = QPushButton("Cancel")        # 创建一个水平布局,增加两个按钮和弹性空间。        # stretch函数在两个按钮前面增加了一些弹性空间。        # 下一步我们把这些元素放在应用的右下角。        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()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

盒布局

栅格布局

import sysfrom PyQt5.QtWidgets import (QWidget, QGridLayout,    QPushButton, QApplication)# 我们创建了栅格化的按钮。class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 创建一个QGridLayout实例,并把它放到程序窗口里。        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)]        # 创建按钮,并使用addWidget()方法把按钮放到布局里面。        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()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

栅格布局

制作提交反馈信息的布局

import sysfrom PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit,    QTextEdit, QGridLayout, QApplication)# 创建了一个有三个标签的窗口。两个行编辑和一个文版编辑,这是用QGridLayout模块搞定的。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)        # 我们可以指定组件的跨行和跨列的大小。这里我们指定这个元素跨5行显示。        grid.addWidget(reviewEdit, 3, 1, 5, 1)        self.setLayout(grid)        self.setGeometry(300, 300, 350, 300)        self.setWindowTitle('Review')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

制作提交反馈信息的布局

Signals & Slots

import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,    QVBoxLayout, QApplication)# 显示了QtGui.QLCDNumber和QtGui.QSlider模块,我们能拖动滑块让数字跟着发生改变。class Example(QWidget):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        # 显示一个带有类似液晶显示屏效果的数字。        lcd = QLCDNumber(self)        # 提供了一个垂直或水平滑动条        sld = QSlider(Qt.Horizontal, self)        vbox = QVBoxLayout()        vbox.addWidget(lcd)        vbox.addWidget(sld)        self.setLayout(vbox)        # 这里是把滑块的变化和数字的变化绑定在一起。        sld.valueChanged.connect(lcd.display)        # sender是信号的发送者,receiver是信号的接收者,slot是对这个信号应该做出的反应。        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Signal and slot')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

Signals & Slots1

Signals & Slots2

重构事件处理器

import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidget, QApplication# 我们替换了事件处理器函数keyPressEvent()。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Event handler')        self.show()    def keyPressEvent(self, e):        if e.key() == Qt.Key_Escape:            self.close()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

重构事件处理器

事件对象

import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QLabel# 我们在一个组件里显示鼠标的X和Y坐标。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        grid = QGridLayout()        grid.setSpacing(10)        x = 0        y = 0        # X Y坐标显示在QLabel组件里        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):        # e代表了事件对象。        # 里面有我们触发事件(鼠标移动)的事件对象。        # x()和y()方法得到鼠标的x和y坐标点,        # 然后拼成字符串输出到QLabel组件里。        x = e.x()        y = e.y()        text = "x: {0},  y: {1}".format(x, y)        self.label.setText(text)if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

事件对象

事件发生

import sysfrom PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication# buttonClicked()方法决定了是哪个按钮能调用sender()方法。class Example(QMainWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        btn1 = QPushButton("Button 1", self)        btn1.move(30, 50)        btn2 = QPushButton("Button 2", self)        btn2.move(150, 50)        # 两个按钮都和同一个slot绑定。        btn1.clicked.connect(self.buttonClicked)        btn2.clicked.connect(self.buttonClicked)        self.statusBar()        self.setGeometry(300, 300, 290, 150)        self.setWindowTitle('Event sender')        self.show()    def buttonClicked(self):        # 我们用调用sender()方法的方式决定了事件源。        # 状态栏显示了被点击的按钮。        sender = self.sender()        self.statusBar().showMessage(sender.text() + ' was pressed')if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

事件发生

信号发送

import sysfrom PyQt5.QtCore import pyqtSignal, QObjectfrom PyQt5.QtWidgets import QMainWindow, QApplication# 我们创建了一个叫closeApp的信号,# 这个信号会在鼠标按下的时候触发,事件与QMainWindow绑定。class Communicate(QObject):    # Communicate类创建了一个pyqtSignal()属性的信号。    closeApp = pyqtSignal()class Example(QMainWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # closeApp信号QMainWindow的close()方法绑定。        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):        # 点击窗口的时候,发送closeApp信号,程序终止。        self.c.closeApp.emit()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

点击退出

在这里插入图片描述

输入文字

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):        # 这是显示一个输入框的代码。        # 第一个参数是输入框的标题,        # 第二个参数是输入框的占位符。        # 对话框返回输入内容和一个布尔值,        # 如果点击的是OK按钮,布尔值就返回True。        text, ok = QInputDialog.getText(self, 'Input Dialog',            'Enter your name:')        if ok:            self.le.setText(str(text))if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

输入文字

选取颜色

from PyQt5.QtWidgets import (QWidget, QPushButton, QFrame,    QColorDialog, QApplication)from PyQt5.QtGui import QColorimport sys# 例子里有一个按钮和一个QFrame,默认的背景颜色为黑色,# 我们可以使用QColorDialog改变背景颜色。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 初始化QtGui.QFrame的背景颜色。        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):        # 弹出一个QColorDialog对话框。        col = QColorDialog.getColor()        if col.isValid():            self.frm.setStyleSheet("QWidget { background-color: %s }"                % col.name())if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

选取颜色

选择字体

from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton,    QSizePolicy, QLabel, QFontDialog, QApplication)import sys# 我们创建了一个有一个按钮和一个标签的QFontDialog的对话框,# 我们可以使用这个功能修改字体样式。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        vbox = QVBoxLayout()        btn = QPushButton('Dialog', 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('Font dialog')        self.show()    def showDialog(self):        # 弹出一个字体选择对话框。        # getFont()方法返回一个字体名称和状态信息。        # 状态信息有OK和其他两种。        font, ok = QFontDialog.getFont()        # 如果点击OK,标签的字体就会随之更改。        if ok:            self.lbl.setFont(font)if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

选择字体

选择文件

from PyQt5.QtWidgets import (QMainWindow, QTextEdit,    QAction, QFileDialog, QApplication)from PyQt5.QtGui import QIconimport sys# 本例中有一个菜单栏,一个置中的文本编辑框,一个状态栏# 点击菜单栏选项会弹出一个QtGui.QFileDialog对话框,# 在这个对话框里,你能选择文件,# 然后文件的内容就会显示在文本编辑框里。# 这里设置了一个文本编辑框,文本编辑框是基于QMainWindow组件的。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('open.png'), 'Open', self)        openFile.setShortcut('Ctrl+O')        openFile.setStatusTip('Open new File')        openFile.triggered.connect(self.showDialog)        menubar = self.menuBar()        fileMenu = menubar.addMenu('&File')        fileMenu.addAction(openFile)        self.setGeometry(300, 300, 350, 300)        self.setWindowTitle('File dialog')        self.show()    def showDialog(self):        # 弹出QFileDialog窗口。        # getOpenFileName()方法的第一个参数是说明文字,        # 第二个参数是默认打开的文件夹路径。        # 默认情况下显示所有类型的文件。        fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')        # 读取选中的文件,并显示在文本编辑框内        # (但是打开HTML文件时,是渲染后的结果,汗)。        if fname[0]:            f = open(fname[0], 'r')            with f:                data = f.read()                self.textEdit.setText(data)if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

选择文件

QCheckBox文本标签复选框

from PyQt5.QtWidgets import QWidget, QCheckBox, QApplicationfrom PyQt5.QtCore import Qtimport sys# 这个例子中,有一个能切换窗口标题的单选框。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 这个是QCheckBox的构造器。        cb = QCheckBox('Show title', self)        cb.move(20, 20)        # 要设置窗口标题,我们就要检查单选框的状态。        # 默认情况下,窗口没有标题,单选框未选中。        cb.toggle()        # 把changeTitle()方法和stateChanged信号关联起来。        # 这样,changeTitle()就能切换窗口标题了。        cb.stateChanged.connect(self.changeTitle)        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('QCheckBox')        self.show()    def changeTitle(self, state):        # 控件的状态是由changeTitle()方法控制的,        # 如果空间被选中,我们就给窗口添加一个标题,        # 如果没被选中,就清空标题。        if state == Qt.Checked:            self.setWindowTitle('QCheckBox')        else:            self.setWindowTitle(' ')if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

QCheckBox文本标签复选框

切换按钮

from PyQt5.QtWidgets import (QWidget, QPushButton,    QFrame, QApplication)from PyQt5.QtGui import QColorimport sys"""我们创建了一个切换按钮和一个QWidget,并把QWidget的背景设置为黑色。点击不同的切换按钮,背景色会在红、绿、蓝之间切换(而且能看到颜色合成的效果,而不是单纯的颜色覆盖)。"""class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 设置颜色为黑色。        self.col = QColor(0, 0, 0)        # 创建一个QPushButton,然后调用它的setCheckable()的方法就把这个按钮编程了切换按钮。        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        # 如果是标签为“red”的按钮被点击,就把颜色更改为预设好的对应颜色。        if source.text() == "Red":            self.col.setRed(val)        elif source.text() == "Green":            self.col.setGreen(val)        else:            self.col.setBlue(val)        # 使用样式表(就是CSS的SS)改变背景色        self.square.setStyleSheet("QFrame { background-color: %s }" %            self.col.name())if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

red

滑块

from PyQt5.QtWidgets import (QWidget, QSlider,    QLabel, QApplication)from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QPixmapimport sys# 这里是模拟的音量控制器。拖动滑块,能改变标签位置的图片。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 创建一个水平的QSlider。        sld = QSlider(Qt.Horizontal, self)        sld.setFocusPolicy(Qt.NoFocus)        sld.setGeometry(30, 40, 100, 30)        # 创建一个QLabel组件并给它设置一个静音图标。        sld.valueChanged[int].connect(self.changeValue)        self.label = QLabel(self)        self.label.setPixmap(QPixmap('mute.png'))        self.label.setGeometry(160, 40, 80, 30)        self.setGeometry(300, 300, 280, 170)        self.setWindowTitle('QSlider')        self.show()    def changeValue(self, value):        # 把valueChanged信号跟changeValue()方法关联起来。        # 根据音量值的大小更换标签位置的图片。这段代码是:如果音量为0,就把图片换成 mute.png。        if value == 0:            self.label.setPixmap(QPixmap('mute.png'))        elif value > 0 and value <= 30:            self.label.setPixmap(QPixmap('min.png'))        elif value > 30 and value < 80:            self.label.setPixmap(QPixmap('med.png'))        else:            self.label.setPixmap(QPixmap('max.png'))if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

滑块

进度条

from PyQt5.QtWidgets import (QWidget, QProgressBar,    QPushButton, QApplication)from PyQt5.QtCore import QBasicTimerimport sys# 我们创建了一个水平的进度条和一个按钮,这个按钮控制进度条的开始和停止。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 新建一个QProgressBar构造器。        self.pbar = QProgressBar(self)        self.pbar.setGeometry(30, 40, 200, 25)        self.btn = QPushButton('Start', 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('QProgressBar')        self.show()    def timerEvent(self, e):        # 每个QObject和又它继承而来的对象都有一个timerEvent()事件处理函数。        # 为了触发事件,我们重载了这个方法。        if self.step >= 100:            self.timer.stop()            self.btn.setText('Finished')            return        self.step = self.step + 1        self.pbar.setValue(self.step)    def doAction(self):        if self.timer.isActive():            self.timer.stop()            self.btn.setText('Start')        else:            # 调用start()方法加载一个时间事件。这个方法有两个参数:过期时间和事件接收者。            self.timer.start(100, self)            self.btn.setText('Stop')if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

进度条

图片

from PyQt5.QtWidgets import QWidget, QHBoxLayout,QLabel, QApplicationfrom PyQt5.QtGui import QPixmapimport sysclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        hbox = QHBoxLayout(self)        # 创建一个QPixmap对象,接收一个文件作为参数。        pixmap = QPixmap("web.png")        # 把QPixmap实例放到QLabel组件里。        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_())

图片

行编辑

import sysfrom PyQt5.QtWidgets import (QWidget, QLabel,    QLineEdit, QApplication)# 例子中展示了一个编辑组件和一个标签,我们在输入框里键入的文本,会立即在标签里显示出来。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        # 创建一个QLineEdit对象。        self.lbl = QLabel(self)        qle = QLineEdit(self)        qle.move(60, 100)        self.lbl.move(60, 40)        # 如果输入框的值有变化,就调用onChanged()方法。        qle.textChanged[str].connect(self.onChanged)        self.setGeometry(300, 300, 280, 170)        self.setWindowTitle('QLineEdit')        self.show()    def onChanged(self, text):        # 在onChanged()方法内部,我们把文本框里的值赋值给了标签组件,        # 然后调用adjustSize()方法让标签自适应文本内容。        self.lbl.setText(text)        self.lbl.adjustSize()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

行编辑

QSplitter组件分割线

# encoding: utf-8# module PyQt5.QtWidgets# from D:\PyCharm 2019.2.3\PycharmProject\QT5Project\venv\lib\site-packages\PyQt5\QtWidgets.pyd# by generator 1.147# no doc# importsimport PyQt5.QtCore as __PyQt5_QtCoreimport PyQt5.QtGui as __PyQt5_QtGuiimport sip as __sipfrom .QWidget import QWidgetclass QFrame(QWidget):    """ QFrame(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()) """    def actionEvent(self, *args, **kwargs): # real signature unknown        pass    def changeEvent(self, QEvent): # real signature unknown; restored from __doc__        """ changeEvent(self, QEvent) """        pass    def childEvent(self, *args, **kwargs): # real signature unknown        pass    def closeEvent(self, *args, **kwargs): # real signature unknown        pass    def connectNotify(self, *args, **kwargs): # real signature unknown        pass    def contextMenuEvent(self, *args, **kwargs): # real signature unknown        pass    def create(self, *args, **kwargs): # real signature unknown        pass    def customEvent(self, *args, **kwargs): # real signature unknown        pass    def destroy(self, *args, **kwargs): # real signature unknown        pass    def disconnectNotify(self, *args, **kwargs): # real signature unknown        pass    def dragEnterEvent(self, *args, **kwargs): # real signature unknown        pass    def dragLeaveEvent(self, *args, **kwargs): # real signature unknown        pass    def dragMoveEvent(self, *args, **kwargs): # real signature unknown        pass    def drawFrame(self, QPainter): # real signature unknown; restored from __doc__        """ drawFrame(self, QPainter) """        pass    def dropEvent(self, *args, **kwargs): # real signature unknown        pass    def enterEvent(self, *args, **kwargs): # real signature unknown        pass    def event(self, QEvent): # real signature unknown; restored from __doc__        """ event(self, QEvent) -> bool """        return False    def focusInEvent(self, *args, **kwargs): # real signature unknown        pass    def focusNextChild(self, *args, **kwargs): # real signature unknown        pass    def focusNextPrevChild(self, *args, **kwargs): # real signature unknown        pass    def focusOutEvent(self, *args, **kwargs): # real signature unknown        pass    def focusPreviousChild(self, *args, **kwargs): # real signature unknown        pass    def frameRect(self): # real signature unknown; restored from __doc__        """ frameRect(self) -> QRect """        pass    def frameShadow(self): # real signature unknown; restored from __doc__        """ frameShadow(self) -> QFrame.Shadow """        pass    def frameShape(self): # real signature unknown; restored from __doc__        """ frameShape(self) -> QFrame.Shape """        pass    def frameStyle(self): # real signature unknown; restored from __doc__        """ frameStyle(self) -> int """        return 0    def frameWidth(self): # real signature unknown; restored from __doc__        """ frameWidth(self) -> int """        return 0    def hideEvent(self, *args, **kwargs): # real signature unknown        pass    def initPainter(self, *args, **kwargs): # real signature unknown        pass    def initStyleOption(self, QStyleOptionFrame): # real signature unknown; restored from __doc__        """ initStyleOption(self, QStyleOptionFrame) """        pass    def inputMethodEvent(self, *args, **kwargs): # real signature unknown        pass    def isSignalConnected(self, *args, **kwargs): # real signature unknown        pass    def keyPressEvent(self, *args, **kwargs): # real signature unknown        pass    def keyReleaseEvent(self, *args, **kwargs): # real signature unknown        pass    def leaveEvent(self, *args, **kwargs): # real signature unknown        pass    def lineWidth(self): # real signature unknown; restored from __doc__        """ lineWidth(self) -> int """        return 0    def metric(self, *args, **kwargs): # real signature unknown        pass    def midLineWidth(self): # real signature unknown; restored from __doc__        """ midLineWidth(self) -> int """        return 0    def mouseDoubleClickEvent(self, *args, **kwargs): # real signature unknown        pass    def mouseMoveEvent(self, *args, **kwargs): # real signature unknown        pass    def mousePressEvent(self, *args, **kwargs): # real signature unknown        pass    def mouseReleaseEvent(self, *args, **kwargs): # real signature unknown        pass    def moveEvent(self, *args, **kwargs): # real signature unknown        pass    def nativeEvent(self, *args, **kwargs): # real signature unknown        pass    def paintEvent(self, QPaintEvent): # real signature unknown; restored from __doc__        """ paintEvent(self, QPaintEvent) """        pass    def receivers(self, *args, **kwargs): # real signature unknown        pass    def resizeEvent(self, *args, **kwargs): # real signature unknown        pass    def sender(self, *args, **kwargs): # real signature unknown        pass    def senderSignalIndex(self, *args, **kwargs): # real signature unknown        pass    def setFrameRect(self, QRect): # real signature unknown; restored from __doc__        """ setFrameRect(self, QRect) """        pass    def setFrameShadow(self, QFrame_Shadow): # real signature unknown; restored from __doc__        """ setFrameShadow(self, QFrame.Shadow) """        pass    def setFrameShape(self, QFrame_Shape): # real signature unknown; restored from __doc__        """ setFrameShape(self, QFrame.Shape) """        pass    def setFrameStyle(self, p_int): # real signature unknown; restored from __doc__        """ setFrameStyle(self, int) """        pass    def setLineWidth(self, p_int): # real signature unknown; restored from __doc__        """ setLineWidth(self, int) """        pass    def setMidLineWidth(self, p_int): # real signature unknown; restored from __doc__        """ setMidLineWidth(self, int) """        pass    def sharedPainter(self, *args, **kwargs): # real signature unknown        pass    def showEvent(self, *args, **kwargs): # real signature unknown        pass    def sizeHint(self): # real signature unknown; restored from __doc__        """ sizeHint(self) -> QSize """        pass    def tabletEvent(self, *args, **kwargs): # real signature unknown        pass    def timerEvent(self, *args, **kwargs): # real signature unknown        pass    def updateMicroFocus(self, *args, **kwargs): # real signature unknown        pass    def wheelEvent(self, *args, **kwargs): # real signature unknown        pass    def __init__(self, parent=None, flags, Qt_WindowFlags=None, Qt_WindowType=None, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__         pass    Box = 1    HLine = 4    NoFrame = 0    Panel = 2    Plain = 16    Raised = 32    Shadow_Mask = 240    Shape_Mask = 15    StyledPanel = 6    Sunken = 48    VLine = 5    WinPanel = 3

QSplitter组件分割线

下拉选框

from PyQt5.QtWidgets import (QWidget, QLabel,    QComboBox, QApplication)import sys# 本例包含了一个QComboBox和一个QLabel。# 下拉选择框有五个选项,都是Linux的发行版名称,标签内容为选定的发行版名称。class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.lbl = QLabel("Ubuntu", self)        # 创建一个QComboBox组件和五个选项。        combo = QComboBox(self)        combo.addItem("Ubuntu")        combo.addItem("Mandriva")        combo.addItem("Fedora")        combo.addItem("Arch")        combo.addItem("Gentoo")        combo.move(50, 50)        self.lbl.move(50, 150)        # 在选中的条目上调用onActivated()方法。        combo.activated[str].connect(self.onActivated)        self.setGeometry(300, 300, 300, 200)        self.setWindowTitle('QComboBox')        self.show()    def onActivated(self, text):        # 在方法内部,设置标签内容为选定的字符串,然后设置自适应文本大小。        self.lbl.setText(text)        self.lbl.adjustSize()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

下拉选框

自定义组件

from PyQt5.QtWidgets import (QWidget, QSlider, QApplication,    QHBoxLayout, QVBoxLayout)from PyQt5.QtCore import QObject, Qt, pyqtSignalfrom PyQt5.QtGui import QPainter, QFont, QColor, QPenimport sys# 本例中,我们使用了QSlider和一个自定义组件,由进度条控制。# 显示的有物体(也就是CD/DVD)的总容量和剩余容量。进度条的范围是1~750。# 如果值达到了700(OVER_CAPACITY),就显示为红色,代表了烧毁了的意思。# 烧录组件在窗口的底部,这个组件是用QHBoxLayout和QVBoxLayout组成的。class Communicate(QObject):    updateBW = pyqtSignal(int)# 基于QWidget组件。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 + 1class 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):        # 拖动滑块的时候,调用了changeValue()方法。        # 这个方法内部,我们自定义了一个可以传参的updateBW信号。        # 参数就是滑块的当前位置。        # 这个数值之后还用来于Burning组件,然后重新渲染Burning组件。        self.c.updateBW.emit(value)        self.wid.repaint()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

自定义组件

转载地址:https://kaisarh.blog.csdn.net/article/details/102933826 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:爬虫:python爬虫学习笔记之Beautifulsoup&正则表达式
下一篇:实战Python:利用Python实现基于终端的文本行编辑程序

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月07日 18时24分06秒