【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 图形与特效
上一篇: 牛客-数据库SQL实战
下一篇: 纯CSS实现气泡框和内凹的圆角