欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【pyqt】学习笔记 知识框架

程序员文章站 2022-05-11 08:09:03
...

文章内容是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 图形与特效

相关标签: pyqt