【pyqt】学习笔记 知识框架

文章内容是pyqt5快速开发实践的内容结构,整理出来,便于后续复习


PyQt基本窗口控件

4-1 QMainWindow

4-2 QWidget

4-3 QLabel

4-4 文本类控件

  • QlineEdit
  • QtextEdit

4-5 按钮类控件

  • QABSTRACButton
  • QPushButton
  • QRadioButton
  • QcheckBox

4-6 QComBox(下拉列表框)

4-7 QSpinBox(计数器)

4-8 QSlider(滑动条)

4-9 对话框类控件

  • QDialog
  • QMessageBox
  • QInputDialog
  • QFontDialog
  • QFileDialog

4-10 窗口绘图类控件

  • QPainter
  • QPen
  • QBrush

4-11 拖曳与剪切板

  • Drag Drop
  • QClipbord

4-12 日历与时间

  • QCalender
  • QDateTimeEdit

4-13 菜单栏 工具栏 状态栏

  • QMenuBar
  • QToolBar
  • QStatusBar

4-14 QPrinter


pyqt5 高级界面控件

5-1 table and tree

  • QTableView
  • QListView
  • QListWidget
  • QTableWidget
  • QTreeView
    child1 = QTreeWidgetItem(root)
    child1.setText(0,'child1')#0类似于树形结构的key
    child1.setText(1,'ios')#1类似于树形结构的value
    child1.setIcon(0,QIcon("./images/IOS.png"))
    child1.setCheckState(0, Qt.Checked)

5-2 容器

  • QTabWidget
    QTabWidget提供一个选项卡课一个页面区域
self.tab2UI()

def tab3UI(self):
        layout=QHBoxLayout()
        layout.addWidget(QLabel("科目"))
        layout.addWidget(QCheckBox("物理"))
        layout.addWidget(QCheckBox("高数"))
        self.setTabText(2,"教育程度")#这里的2代表第二个选项卡
        self.tab3.setLayout(layout)
  • QStackedWidget
        self.leftlist = QListWidget ()#创建一个对象
        self.leftlist.insertItem (0, '联系方式' )
        self.leftlist.insertItem (1, '个人信息' )
        self.leftlist.insertItem (2, '教育程度' )
        self.stack1= QWidget()#创建3个stack对象
        self.stack2= QWidget()
        self.stack3= QWidget()#只负责创建了对象,具体stack中长得什么样子,在顺序执行到下面的句子中得到结果

        self.stack1UI()#3个自定义的函数。执行完这三个句子之后,stack中就会有了内容
        self.stack2UI()
        self.stack3UI()

        self.Stack = QStackedWidget (self)#创建QStackWidget对象
        self.Stack.addWidget (self.stack1)#将3个创建好的结构加入到对象中
        self.Stack.addWidget (self.stack2)
        self.Stack.addWidget (self.stack3)
        hbox = QHBoxLayout(self)
        hbox.addWidget(self.leftlist)
        hbox.addWidget(self.Stack)
        self.setLayout(hbox)
        self.leftlist.currentRowChanged.connect(self.display)

    def stack1UI(self):
        layout=QFormLayout()
        layout.addRow("姓名",QLineEdit())
        layout.addRow("地址",QLineEdit())
        self.stack1.setLayout(layout)

    def stack2UI(self):
        layout=QFormLayout()
        pass   
        self.stack2.setLayout(layout)

    def stack3UI(self):
        pass
  • QDockWidget
    这是一个可以保持浮动状态或在指定位置附加到主窗口中

  • QMidArea 多文档界面
    tab和stack空间只允许一次使用其中的一个窗口

  • QScrollBar

5-3多线程

  • QTimer定时器
    要使用定时器,需要先创建一个QTimer实例,然后将其timeout信号连接到相应的slot,并调用start()。然后,定时器会议恒定的时间间隔发出timeout信号。当窗口控件收到这个timeout信号,便会停止这个计时器
    self.timer.timeout.connet(self.showTime)
        self.startBtn.clicked.connect( self.startTimer) 
        self.endBtn.clicked.connect( self.endTimer) 

    def startTimer(self): 
        # 设置计时间隔并启动
        self.timer.start(1000)
        self.startBtn.setEnabled(False)
        self.endBtn.setEnabled(True)

    def endTimer(self): 
        self.timer.stop()
        self.startBtn.setEnabled(True)
        self.endBtn.setEnabled(False)
  • QThread多线程技术
    要使用QThread开始一个线程,可以创建一个它的子类,然后覆盖掉其QThread.run()函数
class myThread(QThread):
    def __init__(self):
        super(Thread,self).__init__()
    def run(self):
        #thread的相关代码
        pass
#实例化一个线程并用过start开始执行
#调用start()函数口渴启动县城,线程启动之后就会自动调用并实现run方法
thread = myThread()
thread.start()

业务的线程任务就写在run函数中,当run退出之后,线程就结束了。QThread有stared和finished信号,可以为这两个信号指定slot函数,在线程启动和结束时执行一段代码进行资源的初始化与释放操作。更灵活的方式时在自定义的Qthread实例中自定义一个信号,并将自定义的信号连接到指定的slot函数

#删除了部分函数
class MainWidget(QWidget):
    def __init__(self,parent=None):   
        self.thread = Worker()#继承一个线程实例
        self.btnStart.clicked.connect( self.slotStart )
        #c
        self.thread.sinOut.connect(self.slotAdd)

    def slotStart(self):
        self.btnStart.setEnabled(False)
        self.thread.start()#启动线程,自动调用run函数

class Worker(QThread):
    #a  
    sinOut = pyqtSignal(str)

    def __init__(self,parent=None):

    def __del__(self):

    def run(self):
        while self.working == True: 
            # 发出信号  
            #b  
            self.sinOut.emit(file_str)
            # 线程休眠2秒
            self.sleep(2)

提前插入说一下abc三个句子的关系:
通过在一个实例中添加a b两个句子,在这个实例(上面代码是在线程中,当然在其他的class中也是可以的)下创建了sinOut这个信号,然后实例化后,就可以在c处使用这个自定义的信号了

ab有联系,ac,bc无联系
ac->QThread->Worker -> self.thread->c,至此,ab和c才有了联系

  • 事件处理
    在主函数执行耗时间的地方,加入QApplication.processEvents()

5-4 网页交互

使用QWebEngineView空间来展示html页面,实际上使用http get方法实现web加载

view = QWebEngineView()
view.load(QUrl('http://baidu.com'))
view.show()

pyqt5布局管理


pyqt5信号与槽


pyqt5 图形与特效

你可能感兴趣的:(Python,pyqt)