Pyqt5系列(二)
- 格式:doc
- 大小:1016.50 KB
- 文档页数:49
pyqt5数据库使⽤详细教程(打包解决⽅案)关于pyinstaller打包⽣成exe的⽅法安装pip 、 pyinstaller在pycharm 的Terminal窗⼝中输⼊pyinstaller -F -w main.py注:输⼊参数的含义 -F 表⽰⽣成单个可执⾏⽂件-w 表⽰去掉控制台窗⼝,这在GUI界⾯时⾮常有⽤。
不过如果是命令⾏程序的话那就把这个选项删除吧!-p 表⽰你⾃⼰⾃定义需要加载的类路径,⼀般情况下⽤不到-i 表⽰可执⾏⽂件的图标⼀、出现 Cannot find existing PyQt5 plugin directories 报错⼆、出现 pip既不是内部命令,也不是外部命令式报错添加完毕之后,重启pycharm ,重启命令⾏三、出现双击exe报错的问题缺少Qt组件⽆法正常启动,提⽰需要有Qt platforms plugin,于是我们来到这个⽬录这个⽬录直接找到有点困难,可以通过everything搜索看到如下⽂件把这个⽂件夹拷贝到和.exe⽂件⼀个路径下,出现想要的程序了。
四、出现数据库连接失败问题Ⅰ.⾸先选择带命令⾏和不合并的打包⽅式发现出现以下错误此时只需要把platforms⽂件夹复制到main⽂件夹下边即可之后再次打开main.exe⽂件,出现得到的结果是数据库驱动没有加载,这时候将找到之后将这个⽂件夹同样的复制到main⽂件夹中此时,命令提⽰⾏不报问题,即代表启动正常但是,再加⼊另⼀个页⾯跳转重新打包时出现以下问题按照提⽰在他要求的的路径下添加⽂件所需的⽂件使⽤everything查找,在类似的路径下都可以找到然后复制到他要求的路径最后要使⽤原来已经创建好的数据库,需要将已经创建好的数据库重新添加到main⽂件夹下问题暂时解决总结到此这篇关于pyqt5数据库使⽤教程(打包解决⽅案)的⽂章就介绍到这了,更多相关pyqt5数据库使⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
pythonGUI库图形界⾯开发之PyQt5线程类QThread详细使⽤⽅法QThread是Qt的线程类中最核⼼的底层类。
由于PyQt的的跨平台特性,QThread要隐藏所有与平台相关的代码要使⽤的QThread开始⼀个线程,可以创建它的⼀个⼦类,然后覆盖其它QThread.run()函数class Thread(QThread):def __init __(self):super(Thread,self).__ init __()def run(self):#线程相关的代码pass接下来创建⼀个新的线程thread = Thread()thread.start()可以看出,PyQt的线程使⽤⾮常简单—-建⽴⼀个⾃定义的类(如thread),⾃我继承⾃QThread ,并实现其run()⽅法即可在使⽤线程时可以直接得到Thread实例,调⽤其start()函数即可启动线程,线程启动之后,会⾃动调⽤其实现的run()的函数,该⽅法就是线程的执⾏函数业务的线程任务就写在run()函数中,当run()退出之后线程就基本结束了,QThread有started和finished信号,可以为这两个信号指定槽函数,在线程启动和结束之时执⾏⼀段代码进⾏资源的初始化和释放操作,更灵活的使⽤⽅法是,在⾃定义的QThread实例中⾃定义信号,并将信号连接到指定的槽函数,当满⾜⼀定的业务条件时发射此信号QThread类中的常⽤⽅法⽅法描述start()启动线程wait()阻⽌线程,直到满⾜如下条件之⼀与此QThread对象关联的线程已完成执⾏(即从run返回时),如果线程完成执⾏,此函数返回True,如果线程尚未启动,也返回True等待时间的单位是毫秒,如果时间是ULONG_MAX(默认值·),则等待,永远不会超时(线程必须从run返回),如果等待超时,此函数将会返回Falsesleep()强制当前线程睡眠多少秒QThread类中的常⽤信号信号描述started在开始执⾏run函数之前,从相关线程发射此信号finished当程序完成业务逻辑时,从相关线程发射此信号QThread的使⽤⽅法实例import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *class MainWidget(QWidget):def __init__(self, parent=None):super(MainWidget, self).__init__(parent)#设置标题self.setWindowTitle('QThread多线程例⼦')#实例化多线程对象self.thread = Worker()#实例化列表控件与按钮控件self.listFile = QListWidget()self.btnStart = QPushButton('开始')#把控件放置在栅格布局中layout = QGridLayout(self)layout.addWidget(self.listFile, 0, 0, 1, 2)layout.addWidget(self.btnStart, 1, 1)#信号与槽函数的连接self.btnStart.clicked.connect(self.slotStart)self.thread.sinOut.connect(self.slotAdd)def slotAdd(self, file_inf):#向列表控件中添加条⽬self.listFile.addItem(file_inf)def slotStart(self):#开始按钮不可点击,线程开始self.btnStart.setEnabled(False)self.thread.start()class Worker(QThread):sinOut = pyqtSignal(str)def __init__(self, parent=None):super(Worker, self).__init__(parent)#设置⼯作状态与初始num数值self.working = Trueself.num = 0def __del__(self):#线程状态改变与线程终⽌self.working = Falseself.wait()def run(self):while self.working == True:#获取⽂本file_str = 'File index{0}'.format(self.num)self.num += 1# 发射信号self.sinOut.emit(file_str)# 线程休眠2秒self.sleep(2)if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWidget()demo.show()sys.exit(app.exec_())运⾏效果图如下代码分析在这个例⼦中,单击开始按钮,会在后台定时读取数据,并把返回的数据显⽰在界⾯中,⾸先使⽤以下代码进⾏布局,把列表控件和按钮控件放在栅格布局管理器中#实例化列表控件与按钮控件self.listFile = QListWidget()self.btnStart = QPushButton('开始')#把控件放置在栅格布局中layout = QGridLayout(self)layout.addWidget(self.listFile, 0, 0, 1, 2)layout.addWidget(self.btnStart, 1, 1)然后将按钮的clicked信号连接到槽函数,单击开始触发槽函数self.btnStart.clicked.connect(self.slotStart)def slotStart(self):#开始按钮不可点击,线程开始self.btnStart.setEnabled(False)self.thread.start()⽐较复杂的是线程的信号,将线程的sinOut信号连接到slotAdd()槽函数,SlotAdd()函数负责在列表控件中动态添加字符串条⽬self.thread.sinOut.connect(self.slotAdd)def slotAdd(self,file_inf):#向列表控件中添加条⽬self.listFile.addItem(file_inf)定义⼀个线程类,继承⾃QThread,当线程启动时,执⾏run()函数class Worker(QThread):sinOut = pyqtSignal(str)def __init__(self, parent=None):super(Worker, self).__init__(parent)#设置⼯作状态与初始num数值self.working = Trueself.num = 0def __del__(self):#线程状态改变与线程终⽌self.working = Falseself.wait()def run(self):while self.working == True:#获取⽂本file_str = 'File index{0}'.format(self.num)self.num += 1# 发射信号self.sinOut.emit(file_str)# 线程休眠2秒self.sleep(2)多线程失败案例import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *global secsec=0def setTime():global secsec+=1#Led显⽰数字+1lcdNumber.display(sec)def work():#计时器每秒计数timer.start(1000)for i in range(200000000):passtimer.stop()if __name__ == '__main__':app=QApplication(sys.argv)top=QWidget()top.resize(300,120)#垂直布局layout=QVBoxLayout(top)#添加⼀个显⽰⾯板lcdNumber=QLCDNumber()layout.addWidget(lcdNumber)button=QPushButton('测试')layout.addWidget(button)timer=QTimer()#每次计时结束,触发setTimetimer.timeout.connect(setTime)button.clicked.connect(work)top.show()sys.exit(app.exec_())失败效果图如下长时间停留在此界⾯,知道多线程任务完成后,此界⾯才会动,当耗时程序⾮常⼤时,就会造成程序运⾏失败的假象,实际还是在后台运⾏的,只是没有显⽰在主窗⼝的界⾯上,当然⽤户体验也就⾮常差,那么如何解决这个问题呢,下⾯实例三进⾏解答分离UI主线程与⼯作线程实例import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *global secsec = 0class WorkThread(QThread):#实例化⼀个信号对象trigger = pyqtSignal()def __int__(self):super(WorkThread, self).__init__()def run(self):#开始进⾏循环for i in range(2000000000):pass# 循环完毕后发出信号self.trigger.emit()def countTime():global secsec += 1# LED显⽰数字+1lcdNumber.display(sec)def work():# 计时器每秒计数timer.start(1000)# 计时开始workThread.start()# 当获得循环完毕的信号时,停⽌计数workThread.trigger.connect(timeStop)def timeStop():#定时器停⽌timer.stop()print("运⾏结束⽤时", lcdNumber.value())global secsec = 0if __name__ == "__main__":app = QApplication(sys.argv)top = QWidget()top.resize(300, 120)# 垂直布局类QVBoxLayoutlayout = QVBoxLayout(top)# 加显⽰屏,按钮到布局中lcdNumber = QLCDNumber()layout.addWidget(lcdNumber)button = QPushButton("测试")layout.addWidget(button)#实例化定时器与多线程类timer = QTimer()workThread = WorkThread()button.clicked.connect(work)# 每次计时结束,触发 countTimetimer.timeout.connect(countTime)top.show()sys.exit(app.exec_())运⾏效果,程序主界⾯的数值会每秒增加1,直到循环结束,这⾥就避免了主界⾯长时间不动的尴尬!QThread线程事件处理实例对于执⾏很耗时的程序来说,由于PyQt需要等待程序执⾏完毕才能进⾏下⼀步,这个过程表现在界⾯上就是卡顿,⽽如果需要执⾏这个耗时程序时不断的刷新界⾯。
PythonPyQt5Pycharm环境搭建及配置详解(图⽂教程)PyQt5相关安装python 版本 python 3.6.31、安装PyQt5执⾏命令: pip install pyqt52、安装PyQt5-tools执⾏命令:pip install pyqt5-tools3、校验是否成功执⾏如下代码# FileName : PyQtDemo.py# Author : Adil# DateTime : 2018/2/1 11:07# SoftWare : PyCharmfrom PyQt5 import QtWidgets, QtGuiimport sysapp = QtWidgets.QApplication(sys.argv)window = QtWidgets.QWidget();window.show()sys.exit(app.exec_())弹出如下界⾯即可。
Pycharm相关配置1、添加external Tools打开settings->Tools->External Tools点击“+”2、添加QtDesigner如下图设置。
2、添加PyUIC如下图设置。
Parameters:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py3、新建⼀个PyQt demo,创建⼀个项⽬如下图如下图打开QtDesigner打开Qt界⾯如下图如图选择创建⼀个Main Window如图可以根据需要添加⾃⼰的组件如下图保存如下图,使⽤PyUIC将hello.ui⽂件转换为hello.py查看hello.py如下图新建主程序main.py,导⼊hello# FileName : main.py# Author : Adil# DateTime : 2018/2/1 12:00# SoftWare : PyCharmimport sysimport hellofrom PyQt5.QtWidgets import QApplication, QMainWindowif __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = hello.Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())执⾏main.py弹出如下窗⼝ok。
PyQt5-菜单栏⼯具栏状态栏的使⽤(QMenuBar、QToolBar、QStatusBar)⼀、QMenuBar窗体标题下⽅QMenuBar作为窗体菜单栏;QMenu对象提供了⼀个可以添加菜单栏的控件,也可以⽤于创建上下⽂菜单和弹出菜单选项;每个QMenu对象都可以包含⼀个或者多个QAction对象或者级联的QMenu对象;createPopupMenu()⽅法⽤于弹出⼀个菜单;menuBar()⽅法⽤于返回主窗⼝的QMenuBar对象;addMenu()⽅法可以将菜单添加到菜单栏;addAction() ⽅法可以在菜单中进⾏添加某些操作;常⽤⽅法:例如:1#QMenuBar/QMenu/QAction的使⽤(菜单栏)2from PyQt5.QtWidgets import QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout, QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel3from PyQt5.QtCore import QDir4from PyQt5.QtGui import QIcon,QPixmap,QFont5from PyQt5.QtCore import QDate67import sys89class WindowClass(QMainWindow):1011def__init__(self,parent=None):1213 super(WindowClass, self).__init__(parent)14 yout=QHBoxLayout()15 self.menubar=self.menuBar()#获取窗体的菜单栏1617 self.file=self.menubar.addMenu("系统菜单")18 self.file.addAction("New File")1920 self.save=QAction("Save",self)21 self.save.setShortcut("Ctrl+S")#设置快捷键22 self.file.addAction(self.save)2324 self.edit=self.file.addMenu("Edit")25 self.edit.addAction("copy")#Edit下这是copy⼦项26 self.edit.addAction("paste")#Edit下设置paste⼦项2728 self.quit=QAction("Quit",self)#注意如果改为:self.file.addMenu("Quit") 则表⽰该菜单下必须柚⼦菜单项;会有>箭头29 self.file.addAction(self.quit)30 self.file.triggered[QAction].connect(self.processtrigger)31 self.setLayout(yout)32 self.setWindowTitle("Menu Demo")3334def processtrigger(self,qaction):35print(qaction.text()+" is triggered!")3637if__name__=="__main__":38 app=QApplication(sys.argv)39 win=WindowClass()40 win.show()41 sys.exit(app.exec_())⼆、QToolBar⼯具栏该控件是由⽂本按钮、图标或者其他⼩控件按钮组成的可移动⾯板,通常位于菜单栏下⽅,作为⼯具栏使⽤;每次单击⼯具栏中的按钮,此时都会触发actionTriggered信号。
pythonGUI库图形界⾯开发之PyQt5树形结构控件QTreeWidget详细使⽤⽅法与实例PyQt5树形结构控件QTreeWidget简介QTreeWidget 类根据预设的模型提供树形显⽰控件。
QTreeWidget 使⽤类似于 QListView 类的⽅式提供⼀种典型的基于 item 的树形交互⽅法类,该类基于QT的“模型/视图”结构,提供了默认的模型来⽀撑 item 的显⽰,这些 item 类为 QTreeWidgetItem 类。
如果不需要灵活的“模型/视图”框架,可以使⽤QTreeWidget 来创建有层级关系的树形结构。
当把标准 item 模型结合QTreeView 使⽤时,可以得到更灵活的使⽤⽅法,从⽽把“数据”和“显⽰”分离开。
QTreeWidget类中的常⽤⽅法⽅法描述setColumnWidth(int column,int width)将指定列的宽度设置为给定的值Column:指定的列width:指定的宽度insertTopLevelItems()在视图的顶层索引中引⼊项⽬的列表expandAll()展开所有节点的树形节点invisibleRootItem()返回树形控件中不可见的根选项(Root Item)selectionItems()返回所有选定的⾮隐藏项⽬的列表内QTreeWidgetItem类中常⽤的⽅法⽅法描述addChild()将⼦项追加到⼦列表中setText()设置显⽰的节点⽂本Text()返回显⽰的节点⽂本setCheckState(column.state)设置指定列的选中状态:Qt.Checked:节点选中Qt.Unchecked:节点没有选中setIcon(column,icon)在指定的列中显⽰图标QTreeWidget树形结构控件的实例树形结构是通过QTreeWidget和QTreeWidgetItem类实现的,其中QTreeWidgetItem类实现了节点的添加,其完整代码如下import sysfrom PyQt5.QtWidgets import *from PyQt5.QtGui import QIcon, QBrush, QColorfrom PyQt5.QtCore import Qtclass TreeWidgetDemo(QMainWindow):def __init__(self, parent=None):super(TreeWidgetDemo, self).__init__(parent)self.setWindowTitle('TreeWidget 例⼦')self.tree=QTreeWidget()#设置列数self.tree.setColumnCount(2)#设置树形控件头部的标题self.tree.setHeaderLabels(['Key','Value'])#设置根节点root=QTreeWidgetItem(self.tree)root.setText(0,'Root')root.setIcon(0,QIcon('./images/root.png'))# todo 优化2 设置根节点的背景颜⾊brush_red=QBrush(Qt.red)root.setBackground(0,brush_red)brush_blue=QBrush(Qt.blue)root.setBackground(1,brush_blue)#设置树形控件的列的宽度self.tree.setColumnWidth(0,150)#设置⼦节点1child1=QTreeWidgetItem()child1.setText(0,'child1')child1.setText(1,'ios')child1.setIcon(0,QIcon('./images/IOS.png'))#todo 优化1 设置节点的状态child1.setCheckState(0,Qt.Checked)root.addChild(child1)#设置⼦节点2child2=QTreeWidgetItem(root)child2.setText(0,'child2')child2.setText(1,'')child2.setIcon(0,QIcon('./images/android.png'))#设置⼦节点3child3=QTreeWidgetItem(child2)child3.setText(0,'child3')child3.setText(1,'android')child3.setIcon(0,QIcon('./images/music.png'))#加载根节点的所有属性与⼦控件self.tree.addTopLevelItem(root)#TODO 优化3 给节点添加响应事件self.tree.clicked.connect(self.onClicked)#节点全部展开self.tree.expandAll()self.setCentralWidget(self.tree)def onClicked(self,qmodeLindex):item=self.tree.currentItem()print('Key=%s,value=%s'%(item.text(0),item.text(1))) if __name__ == '__main__':app = QApplication(sys.argv)tree = TreeWidgetDemo()tree.show()sys.exit(app.exec_())初始运⾏图如下优化⼀:设置节点的状态这⾥添加了child1的选中状态child1.setCheckState(0,Qt.Checked)优化⼆:设置节点的背景颜⾊这⾥设置了根节点的背景颜⾊brush_red=QBrush(Qt.red)root.setBackground(0,brush_red)brush_blue=QBrush(Qt.blue)root.setBackground(1,brush_blue)优化三:给节点添加响应事件点击,会在控制台输出当前地key值与value值self.tree.clicked.connect(self.onClicked)def onClicked(self,qmodeLindex):item=self.tree.currentItem()print('Key=%s,value=%s'%(item.text(0),item.text(1)))系统定制模式实例在上⾯的例⼦中,QTreeWidgetItem类的节点是⼀个个添加上去的,这样有时很不⽅便,特别是窗⼝产⽣⽐较复杂的树形结构时,⼀般都是通过QTreeView类来实现的,⽽不是QTreeWidget类,QTreeView和QTreeWidget类最⼤的区别就是,QTreeView类可以使⽤操作系统提供的定制模式,⽐如⽂件系统盘的树列表import sysfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *if __name__ == '__main__':app=QApplication(sys.argv)#window系统提供的模式model=QDirModel()#创建⼀个QTreeView的控件tree=QTreeView()#为控件添加模式tree.setModel(model)tree.setWindowTitle('QTreeView例⼦')tree.resize(640,480)tree.show()sys.exit(app.exec_())本⽂主要讲解了PyQt5树形结构控件QTreeWidget详细使⽤⽅法与实例,更多关于PyQt5控件使⽤知识请查看下⾯的相关链接。
pyqt5 python 案例1. PyQt5入门案例:创建一个简单的窗口在PyQt5中,可以使用QWidget类创建一个简单的窗口。
以下是一个简单的示例代码,可以创建一个空白的窗口。
```pythonimport sysfrom PyQt5.QtWidgets import QApplication, QWidgetif __name__ == '__main__':app = QApplication(sys.argv)window = QWidget()window.setWindowTitle('简单窗口')window.setGeometry(100, 100, 300, 200)window.show()sys.exit(app.exec_())```2. PyQt5案例:添加按钮和标签在PyQt5中,可以使用QPushButton和QLabel类来创建按钮和标签。
以下是一个示例代码,创建一个窗口,其中包含一个按钮和一个标签。
```pythonimport sysfrom PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabeldef button_clicked():label.setText('按钮被点击了!')if __name__ == '__main__':app = QApplication(sys.argv)window = QWidget()window.setWindowTitle('按钮和标签')window.setGeometry(100, 100, 300, 200)button = QPushButton('点击我', window)button.setGeometry(100, 50, 100, 30)button.clicked.connect(button_clicked)label = QLabel('标签', window)label.setGeometry(100, 100, 100, 30)window.show()sys.exit(app.exec_())```3. PyQt5案例:创建一个简单的登录窗口在PyQt5中,可以使用QLineEdit、QPushButton和QMessageBox类来创建一个简单的登录窗口。
PyQt5官⽅教程+帮助⽂档+模块功能汇总写在开头笔者⾃学PyQt5的过程中,在⽹上发现了不少友好的新⼿⼊门教程,⽐如:但是学习PyQt5的最好⽅法是阅读官⽅⽂档 + ⾃⼰动⼿实践,笔者将分享,翻译部分内容,并整理汇总常⽤组件。
pyqt5 简介PyQt5是绑定Python的Qt应⽤程序框架。
Qt是⼀组C++库和开发⼯具,包括平台独⽴抽象图形⽤户接⼝、⽹络、线程、正则表达式、SQL数据库、SVG、OpenGL、XML、⽤户和应⽤程序设置、定位和定位服务、短程通信(NFC和蓝⽛)、上⽹、3D动画、图表、3D数据可视化和应⽤商店接⼝。
这些功能由1000多个类实现,这些类被封装成⼀组模块。
PyQt5⽀持Windows、Linux、UNIX、Android、MacOS和iOS平台。
PyQt5的主页是< >,在这⾥能找到最新的稳定版本、当前的开发版本和帮助⽂档的最新版本。
当前版本为PyQt5 v5.14.0(2020.02.26) PyQt5是使⽤SIP绑定⽣成器构建的。
为了构建和使⽤PyQt5,必须安装SIP。
PyQt4⽀持Qt的早期版本。
pyqt5包含的模块PyQt5的如下表所⽰:(按字典序排列)模块名功能Enginio⽤于访问Qt云服务的类(不推荐)QAxContainer访问ActiveX控件和COM对象的类Qt其他模块的合并Qt3DAnimation在模拟中⽀持动画的类Qt3DCore⽀持近实时仿真系统的核⼼类Qt3DExtras预先构建的元素,与Qt3D⼀起使⽤Qt3DInput处理使⽤Qt3D时⽤户输⼊的类Qt3DLogic启⽤帧同步的类Qt3DRender启⽤2D和3D呈现的类QtAndroidExtras特定于Android的附加类QtBluetooth⽀持设备之间蓝⽛连接的类QtChart⽀持2D图表创建的类QtCore Qt核⼼类QtDBus使⽤D-Bus协议⽀持IPC的类QtDataVisualization⽀持3D数据可视化的类QtDesigner允许使⽤Python扩展Qt设计器的类QtGui widget和OpenGL gui共有的核⼼类QtHelp⽤于创建和查看可搜索⽂档的类QtLocation⽤于创建映射应⽤程序的类QtMacExtras特定于macOS和iOS的附加类QtMultimedia多媒体内容、摄像机和收⾳机的类QtMultimediaWidgets提供附加的多媒体相关⼩部件和控件的类QtNetwork核⼼⽹络类QtNetworkAuth⽹络授权类QtNfc⽀持设备之间NFC连接的类QtOpenGL在传统窗⼝⼩部件中呈现OpenGL的类(不推荐)QtPositioning从卫星、wifi等获取定位信息的类QtPrintSupport实现打印的类QtPurchasing⽀持从应⽤商店购买应⽤程序的类模块名功能QtQml与QML语⾔集成的类QtQuick使⽤Python代码扩展QML应⽤程序的类QtQuickWidgets⽤于在传统⼩部件中呈现QML场景的类QtRemoteObjects⽤于在进程或系统之间共享QObject的API的类QtSensors⽤于访问系统硬件传感器的类QtSerialPort⽤于访问系统的串⾏端⼝的类QtSql与SQL数据库集成的类QtSvg提供对SVG⽀持的类QtTest⽀持GUI应⽤程序单元测试的类QtWebChannel⽤于Python和HTML/JavaScript之间的点对点通信的类QtWebEngine⽤于将QML Web引擎对象与Python集成的类QtWebEngineCore Web引擎核⼼类QtWebEngineWidgets基于Chromium的web浏览器QtWebKit基于WebKit2的web浏览器(已弃⽤) QtWebKitWidgets基于WebKit1的web浏览器(已弃⽤)QtWebSockets实现WebSocket协议的类QtWidgets⽤于创建经典桌⾯样式ui的类QtWinExtras特定于Windows的附加类QtX11Extras特定于X11的其他类QtXml⽀持SAX和DOM到XML接⼝的类QtXmlPatterns⽀持其他XML技术的类sip绑定开发⼈员和⽤户的实⽤程序uic⽤于处理Qt设计器创建的⽂件的类写在最后⽹上资源整理与总结⽔平参差不齐,官⽅⽂档永远是最可靠的伙伴。
pyqt5&python Gui入门教程(1)第一个窗口(1)第一个窗口和代码详细注释:from PyQt5 import QtWidgets#从PyQt库导入QtWidget通用窗口类class mywindow(QtWidgets.QWidget):#自己建一个mywindows类,以class开头,mywindows是自己的类名,#(QtWidgets.QWidget)是继承QtWidgets.QWidget类方法,# 定义类或函数不要忘记':'符号,判断语句也必须以':'结尾!def __init__(self):#def是定义函数(类方法)了,同样第二个__init__是函数名# (self)是pyqt类方法必须要有的,代表自己,相当于java,c++中的this #其实__init__是析构函数,也就是类被创建后就会预先加载的项目super(mywindow,self).__init__()#这里我们要重载一下mywindows同时也包含了QtWidgets.QWidget的预加载项import sysapp = QtWidgets.QApplication(sys.argv)#pyqt窗口必须在QApplication方法中使用,#要不然会报错 QWidget: Must construct a QApplication before a QWidget windows = mywindow()# 生成过一个实例(对象), windows是实例(对象)的名字,可以随便起!# mywindows()是我们上面自定义的类windows.show()#有了实例,就得让他显示这里的show()是QWidget的方法,用来显示窗口的!sys.exit(app.exec_())#启动事件循环pyqt5&python Gui入门教程(2)第一个窗口(2)上图是第一篇教程,下面的显示效果都一样,我们来看看有什么不同1、类的名字、实例的名字都换了,2、多了一个if __name__ == "__main__": 以及下面的代码缩进了,层次改变了1、我们把结尾的5句代码,单独建立了一个函数2、然后直接调用函数3、注意两个def的缩进,第一个def缩进了代表是在class里面,第二个和class平齐,则是在外面。
pyqt5&python Gui入门教程(1)第一个窗口(1)第一个窗口和代码详细注释:from PyQt5 import QtWidgets#从PyQt库导入QtWidget通用窗口类class mywindow(QtWidgets.QWidget):#自己建一个mywindows类,以class开头,mywindows是自己的类名,#(QtWidgets.QWidget)是继承QtWidgets.QWidget类方法,# 定义类或函数不要忘记':'符号,判断语句也必须以':'结尾!def __init__(self):#def是定义函数(类方法)了,同样第二个__init__是函数名# (self)是pyqt类方法必须要有的,代表自己,相当于java,c++中的this #其实__init__是析构函数,也就是类被创建后就会预先加载的项目super(mywindow,self).__init__()#这里我们要重载一下mywindows同时也包含了QtWidgets.QWidget的预加载项import sysapp = QtWidgets.QApplication(sys.argv)#pyqt窗口必须在QApplication方法中使用,#要不然会报错 QWidget: Must construct a QApplication before a QWidget windows = mywindow()# 生成过一个实例(对象), windows是实例(对象)的名字,可以随便起!# mywindows()是我们上面自定义的类windows.show()#有了实例,就得让他显示这里的show()是QWidget的方法,用来显示窗口的!sys.exit(app.exec_())#启动事件循环pyqt5&python Gui入门教程(2)第一个窗口(2)上图是第一篇教程,下面的显示效果都一样,我们来看看有什么不同1、类的名字、实例的名字都换了,2、多了一个if __name__ == "__main__": 以及下面的代码缩进了,层次改变了1、我们把结尾的5句代码,单独建立了一个函数2、然后直接调用函数3、注意两个def的缩进,第一个def缩进了代表是在class里面,第二个和class平齐,则是在外面。
【python】python,PyQt5以及Qtdesigner的使⽤_做界⾯(⽤vscode)1.PyQt5和Qt designer准备win+r cmd 输⼊以下python -m pip install -i PyQt5python -m pip install -i PyQt5-Tools打开vscode,搜索pyqt integration,安装(若原本未⽤vscode可能要转看更清晰⼀些,会告诉你vscode的配置之类的)2.配置pyqt integrationvscode中,⽂件——⾸选项——设置——搜索pyqta.将python安装路径下的designer找到并填到此处(lib前⾯每⼈不⼀样,看你的python装在哪⾥)C:\Python37\Lib\site-packages\qt5_applications\Qt\bin\designerb.选做:pyuic5路径也改(看到两个这样改的,但有博主没改也没影响暂时,我在此处未改)C:\Python37\Scripts\pyuic53.编辑界⾯a.vscode——资源管理器,打开⼀个⽂件夹——在空⽩处右键——PYQT: New Form——创建Main Windowb.拖动左侧⼯具,添加(内部⽂字可双击进⾏修改)c.保存这个ui界⾯在⼀个⽂件夹内4.将ui⽂件转成py⽂件从vscode资源管理器打开这个⽂件夹(或者⽂件——打开⽂件夹)在test1.ui右键——PYQT: Compile Form ,⾃动⽣成py⽂件Ui_test1.py(或者win+r cmd 在保存ui⽂件的盘:pyuic5 -o name.py name.ui)5.运⾏显⽰需要在此⽂件夹下新建main.py⽂件复制以下代码# UI_testimport sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom Ui_test1 import Ui_MainWindowclass testwindow(QtWidgets.QMainWindow,Ui_MainWindow):def__init__(self):super(testwindow,self).__init__()self.setupUi(self)if__name__=='__main__':app = QtWidgets.QApplication(sys.argv)window = testwindow()window.show()sys.exit(app.exec_())以下这个是另⼀位博主的,下有链接,⽬前初涉,未细究,两个版本有⼀点点不同,但是⽆伤⼤雅,都能实现。
Pyqt5系列(二)五基本界面组件之inputDialogQInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,可以是一个字符串,一个Int类型数据,一个double类型数据或是一个下拉列表框的条目。
对应的Dialog其中包括一个提示标签,一个输入控件(若是调用字符串输入框,则为一个QLineEdit,若是调用Int类型或double类型,则为一个QSpinBox,若是调用列表条目输入框,则为一个QComboBox),还包括一个确定输入(Ok)按钮和一个取消输入(Cancel)按钮。
QInputDialog:class QInputDialog(QDialog)| QInputDialog(QWidget parent=None, Qt.WindowFlags flags=0)QInputDialog同样继承自QDialog,提供简单输入的对话框,代码示例:示例代码如下:#-*- coding:utf-8 -*-'''inputDialog'''__author__ = 'Tony Zhu'from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QInputDialog, QGridLayout, QLabel, QPushButton, QFrameclass InputDialog(QWidget):def __init__(self):super(InputDialog,self).__init__()self.initUi()def initUi(self):self.setWindowTitle("项目信息")self.setGeometry(400,400,300,260)label1=QLabel("项目名称:")label2=QLabel("项目类型:")label3=QLabel("项目人员:")label4=QLabel("项目成本:")label5=QLabel("项目介绍:")Lable = QLabel("PyQt5")Lable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.styleLable = QLabel("外包")self.styleLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.numberLable = QLabel("40")self.numberLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.costLable = QLabel("400.98")self.costLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.introductionLable = QLabel("服务外包第三方公司")self.introductionLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)nameButton=QPushButton("...")nameButton.clicked.connect(self.selectName)styleButton=QPushButton("...")styleButton.clicked.connect(self.selectStyle)numberButton=QPushButton("...")numberButton.clicked.connect(self.selectNumber)costButton=QPushButton("...")costButton.clicked.connect(self.selectCost)introductionButton=QPushButton("...")introductionButton.clicked.connect(self.selectIntroduction)mainLayout=QGridLayout()mainLayout.addWidget(label1,0,0)mainLayout.addWidget(Lable,0,1)mainLayout.addWidget(nameButton,0,2)mainLayout.addWidget(label2,1,0)mainLayout.addWidget(self.styleLable,1,1)mainLayout.addWidget(styleButton,1,2)mainLayout.addWidget(label3,2,0)mainLayout.addWidget(self.numberLable,2,1)mainLayout.addWidget(numberButton,2,2)mainLayout.addWidget(label4,3,0)mainLayout.addWidget(self.costLable,3,1)mainLayout.addWidget(costButton,3,2)mainLayout.addWidget(label5,4,0)mainLayout.addWidget(self.introductionLable,4,1)mainLayout.addWidget(introductionButton,4,2)self.setLayout(mainLayout)def selectName(self):name,ok = QInputDialog.getText(self,"项目名称","输入项目名称:",QLineEdit.Normal,Lable.text()) if ok and (len(name)!=0):Lable.setText(name)def selectStyle(self):list = ["外包","自研"]style,ok = QInputDialog.getItem(self,"项目性质","请选择项目性质:",list)if ok :self.styleLable.setText(style)def selectNumber(self):number,ok = QInputDialog.getInt(self,"项目成员","请输入项目成员人数:",int(self.numberLable.text()),20,100,2)if ok :self.numberLable.setText(str(number))def selectCost(self):cost,ok = QInputDialog.getDouble(self,"项目成本","请输入项目成员人数:",float(self.costLable.text()),100.00,500.00,2)if ok :self.costLable.setText(str(cost))def selectIntroduction(self):introduction,ok = QInputDialog.getMultiLineText(self,"项目介绍","介绍:","服务外包第三方公司\nPython project")if ok :self.introductionLable.setText(introduction)if __name__=="__main__":import sysapp=QApplication(sys.argv)myshow=InputDialog()myshow.show()sys.exit(app.exec_())示例说明:通过点击不同的按钮,来选择不同类型的输入对话框,从而选择所需的数据。
代码分析:L18~22:label1=QLabel("项目名称:")label2=QLabel("项目类型:")label3=QLabel("项目人员:")label4=QLabel("项目成本:")label5=QLabel("项目介绍:")定义了数据项名称的标签。
L24~33:Lable = QLabel("PyQt5")Lable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.styleLable = QLabel("外包")self.styleLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.numberLable = QLabel("40")self.numberLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.costLable = QLabel("400.98")self.costLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.introductionLable = QLabel("服务外包第三方公司")self.introductionLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)定义了项目数据项中的数据内容,数据内容显示在对应的标签中。
setFrameStyle()设定标签的样式,有如下的样式:QFrame.BoxQFrame.PanelQFrame.WinPanelQFrame.HLineQFrame.VLineQFrame.StyledPanelQFrame.SunkenQFrame.RaisedL35~L44:nameButton=QPushButton("...")nameButton.clicked.connect(self.selectName)styleButton=QPushButton("...")styleButton.clicked.connect(self.selectStyle)numberButton=QPushButton("...")numberButton.clicked.connect(self.selectNumber)costButton=QPushButton("...")costButton.clicked.connect(self.selectCost)introductionButton=QPushButton("...")introductionButton.clicked.connect(self.selectIntroduction)实例化QPushButton对象,并将对应的clicked信号和自定义的槽函数绑定起来。