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是一个广泛应用于Python编程界的GUI工具包,它提供了丰富的功能和灵活的操作方式,可以帮助开发者轻松创建各种精美的窗口界面。
其中,PyQt5的QDir类是用于处理目录和文件的类,提供了丰富的方法和属性,便于开发者对文件和目录进行各种操作。
在使用PyQt5的QDir类时,常用的方法包括:1. 构造函数:QDir类的构造函数可以接受多种参数,如路径名、过滤器、排序规则等,用于创建一个QDir对象。
通过构造函数,开发者可以快速初始化一个QDir对象,并对其进行各种操作。
2. cd()方法:cd()方法用于切换当前目录到指定路径。
通过调用cd()方法,开发者可以方便地在不同的目录间进行切换,以便进行文件的读取、写入等操作。
3. exists()方法:exists()方法用于判断指定路径的文件或目录是否存在。
对于开发者来说,判断文件或目录是否存在是十分常见的需求,exists()方法可以帮助开发者快速完成这一操作。
4. mkdir()方法:mkdir()方法用于创建新目录。
当开发者需要在指定路径下创建新目录时,可以通过调用mkdir()方法实现,这为文件的组织和管理提供了便利。
5. remove()方法:remove()方法用于删除指定路径的文件或目录。
在文件或目录不再需要时,可以使用remove()方法将其删除,以释放空间或进行清理操作。
6. rmdir()方法:rmdir()方法用于删除指定目录。
和remove()方法一样,rmdir()方法也是用于删除文件系统中的元素,但不同的是rmdir()方法只能用于删除目录,而不能删除文件。
7. entryList()方法:entryList()方法用于获取指定路径下的文件和目录列表。
通过调用entryList()方法,开发者可以获取目录下的所有文件和子目录的名称,以便进一步处理这些元素。
8. absolutePath()方法:absolutePath()方法用于返回指定路径的绝对路径。
pyqt5 qtreewidgetitem的settext说明PyQt5 QTreeWidgetItem的setText说明PyQt5是一个流行的Python库,用于创建图形用户界面(GUI)应用程序。
其中的QTreeWidgetItem类提供了一种方便的方法来创建和管理树状结构的控件。
setText是QTreeWidgetItem中的一个重要方法,它用于设置节点的文本内容。
本文将逐步回答如何使用setText方法,并详细讨论其各个方面。
QTreeWidgetItem的setText方法旨在设置节点的显示文本。
它接受两个参数:列索引和文本字符串。
列索引代表树状控件的列数,可以是任意非负整数。
文本字符串则是希望在特定列显示的内容。
下面是一步一步的说明,如何使用setText方法:第一步:导入必要的模块和类首先,我们需要导入PyQt5库以及QTreeWidgetItem类。
在Python脚本的开头添加以下代码:pythonfrom PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem第二步:创建一个QTreeWidget实例和根节点接下来,我们需要创建一个QTreeWidget实例和根节点。
根节点是树状控件的起始点,可以包含其他子节点。
以下是示例代码:pythonapp = QApplication([])tree_widget = QTreeWidget()root_item = QTreeWidgetItem(tree_widget)第三步:设置列数在默认情况下,树状控件的列数为1。
但是,我们可以通过调用setColumnCount方法来设置不同的列数。
对于本文的目的,我们将把列数设置为2。
以下是代码示例:pythontree_widget.setColumnCount(2)第四步:设置根节点的文本现在,我们可以使用setText方法为根节点设置文本。
[Python⾃学]PyQT5-信号与槽⼀、简单Demo简单使⽤信号和槽(之前常⽤的使⽤⽅式):class DemoWin(QMainWindow):def__init__(self):super().__init__()self.initUI()def initUI(self):self.resize(400, 250)self.btn = QPushButton("发送信号", self)# 发送⼀个clicked信号,绑定槽函数是self.onClick()self.btn.clicked.connect(self.onClick)# 添加窗⼝标题self.setWindowTitle("SignalDemo")# 槽函数,接收btn的clicked信号def onClick(self):self.btn.setText("接收到信号")self.btn.setStyleSheet("max-width:200px;min-width:200px;")这是最简单的信号和槽的使⽤⽅法,其中clicked事件是button的默认事件,我们将其绑定到⾃定义的onClick槽函数即可。
⼆、⾃定义信号Demo# 导⼊信号from PyQt5.QtCore import Qt, QObject, pyqtSignal# ⾃定义信号类class MySignal(QObject):sendmsg = pyqtSignal(object) # 定义⼀个信号,object表⽰传递⼀个参数(object是python中的基类)def run(self):self.sendmsg.emit("Hello PyQt5") # 触发信号,并传递⼀个string参数class MySlot(QObject):# 定义槽函数,接收⼀个string参数def slot(self, msg):print("接收到的信息是:", msg)if__name__ == '__main__':mySignal = MySignal()mySlot = MySlot()# 将信号和槽进⾏绑定mySignal.sendmsg.connect(mySlot.slot)#mySignal.sendmsg.disconnect(mySlot.slot) # 断开连接# 触发信号 mySignal.run() # 打印 "接收到的信息是: Hello PyQt5"1)⾸先创建⼀个pyqtSignal信号实例(参数对应槽的参数的类型)2)使⽤connect绑定信号和槽(使⽤后可以⼿⼯断开连接,使⽤mySignal.sendmsg.disconnect(mySlot.slot))3)触发信号三、信号传递数据(多个参数)# 导⼊信号from PyQt5.QtCore import Qt, QObject, pyqtSignal# ⾃定义信号类class MySignal(QObject):sendmsg = pyqtSignal(object, int, dict) # 定义⼀个信号,传递三个参数def run(self):self.sendmsg.emit("Hello PyQt5", 50, {"name": "leo"}) # 触发信号,并传递三个参数,参数类型在信号定义时指定class MySlot(QObject):# 定义槽函数,接收⼀个string参数def slot(self, msg,age,name):print("接收到的信息是:", msg)print("接收到的年龄是:", age)print("接收到的名称是:", name['name'])if__name__ == '__main__':mySignal = MySignal()mySlot = MySlot()# 将信号和槽进⾏绑定mySignal.sendmsg.connect(mySlot.slot)# 触发信号mySignal.run() # 打印 "接收到的信息是: Hello PyQt5"可以看到,我们在定义信号的时候指定了对应槽函数的参数类型,并在触发信号时传⼊实际的参数,这样槽函数就可以接受到数据了。
[Python⾃学]PyQT5-窗⼝风格、窗⼝样式、GIF动画、窗⼝透明⼀、修改窗⼝的风格(控件风格)修改Window的风格,只会响应窗⼝中的所有控件,⽽对窗⼝的标题栏等没有影响(标题栏是受系统风格影响的)。
import sys# 导⼊QT,其中包含⼀些常量,例如颜⾊等from PyQt5.QtCore import Qtfrom PyQt5 import QtCore# 导⼊常⽤组件from PyQt5.QtWidgets import QApplication, QWidget, QStyleFactoryfrom PyQt5.QtWidgets import QVBoxLayout, QComboBox# 使⽤调⾊板等from PyQt5.QtGui import QIconclass DemoWin(QWidget):def__init__(self):super(DemoWin, self).__init__()self.initUI()def initUI(self):self.resize(400, 200)self.stylesComboBox = QComboBox()# 将⽀持的风格加到comboBox中self.stylesComboBox.addItems(QStyleFactory.keys())# 获取当前窗⼝的风格print(QApplication.style().objectName()) # 当前为windowsvista风格# 获取当前风格对应的indexindex = self.stylesComboBox.findText(QApplication.style().objectName(), QtCore.Qt.MatchFixedString) # index=0# 将comboBox的值设置为当前indexself.stylesComboBox.setCurrentIndex(index)# 将comboBox改变值的信号和槽函数绑定self.stylesComboBox.activated[str].connect(self.handleStyleChanged)layout = QVBoxLayout()layout.addWidget(self.stylesComboBox)self.setLayout(layout)# 添加窗⼝标题self.setWindowTitle("StyleChangeDemo")def handleStyleChanged(self, style):QApplication.setStyle(style)if__name__ == '__main__':app = QApplication(sys.argv)app.setWindowIcon(QIcon("images/icon.ico"))# 创建⼀个主窗⼝mainWin = DemoWin()# 显⽰mainWin.show()# 主循环sys.exit(app.exec_())实现效果:⼆、窗⼝样式(窗⼝风格)1.简单Demoimport sys# 导⼊QT,其中包含⼀些常量,例如颜⾊等from PyQt5.QtCore import Qt# 导⼊常⽤组件from PyQt5.QtWidgets import QApplication, QMainWindow# 使⽤调⾊板等from PyQt5.QtGui import QIconclass DemoWin(QMainWindow):def__init__(self):super(DemoWin, self).__init__()self.initUI()def initUI(self):self.resize(400, 250)# 设置最⼤化按钮,最⼩化按钮,关闭按钮,以及窗⼝⼀直在最顶层self.setWindowFlags(Qt.WindowMaximizeButtonHint | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowStaysOnTopHint) # 为窗⼝设置⼀个对象名,⽅便使⽤QSS设置样式self.setObjectName("MainWindow")# 设置QSS样式self.setStyleSheet("#MainWindow{border-image:url('./images/ailusha.png');}")# 添加窗⼝标题self.setWindowTitle("窗⼝样式Demo")if__name__ == '__main__':app = QApplication(sys.argv)app.setWindowIcon(QIcon("images/icon.ico"))# 创建⼀个主窗⼝mainWin = DemoWin()# 显⽰mainWin.show()# 主循环sys.exit(app.exec_())实现效果:可以看到,窗⼝右上⽅有最⼤化按钮、最⼩化按钮和关闭按钮。
PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多⽂档控件、停靠控件)1、树控件的基本使⽤⽅法QTreeWidget'''QTreeWidget树控件的使⽤⽅法添加图标,添加表格,添加复选框等'''from PyQt5.QtWidgets import *from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIcon,QBrush,QColorimport sysclass treewidget(QMainWindow):def __init__(self):super(treewidget,self).__init__()self.setWindowTitle("树控件的基本⽤法")self.resize(800,300)#设置树控件self.tree=QTreeWidget()self.tree.setColumnCount(2) #制定树控件为两列self.tree.setHeaderLabels(["key","value"]) #设置列标签#添加根节点1root=QTreeWidgetItem(self.tree)root.setText(0,"根节点")root.setIcon(0,QIcon("./image/1.png"))self.tree.setColumnWidth(0,300)#添加⼦节点1n1=QTreeWidgetItem(root)n1.setText(0,"⼦节点1")n1.setText(1,"⼦节点的数据")n1.setIcon(0,QIcon("./image/1.png"))n1.setCheckState(0,Qt.Checked) #添加复选框#添加⼦节点2n2=QTreeWidgetItem(root)n2.setText(0, "⼦节点2")n2.setText(1, "⼦节点2的数据")n2.setIcon(0, QIcon("./image/1.png"))n2.setCheckState(0, Qt.Checked) # 添加复选框#为⼦节点再添加⼦节点2-1n3 = QTreeWidgetItem(n2)n3.setText(0, "⼦节点2-1")n3.setText(1, "⼦节点2-1的数据")n3.setIcon(0, QIcon("./image/1.png"))n3.setCheckState(0, Qt.Checked) # 添加复选框self.tree.expandAll() #设置所有的节点为展开的状态self.setCentralWidget(self.tree)if __name__=="__main__":app=QApplication(sys.argv)p=treewidget()p.show()sys.exit(app.exec_())2、树控件添加响应事件'''树控件响应事件'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import QIcon,QBrush,QColorimport sysclass treeevent(QMainWindow):def __init__(self):super(treeevent,self).__init__()self.setWindowTitle("树控件的基本⽤法")self.resize(800,300)#创建树控件,设置列数为2self.tree=QTreeWidget()self.tree.setColumnCount(2)self.tree.setHeaderLabels(["key","value"])root=QTreeWidgetItem(self.tree)root.setText(0,"root")root.setText(1,"1")c1=QTreeWidgetItem(root)c1.setText(0,"child1")c1.setText(1,"2")c2=QTreeWidgetItem(c1)c2.setText(0,"child2")c2.setText(1,"3")c3 = QTreeWidgetItem(c1)c3.setText(0, "child3")c3.setText(1, "4")#为树节点设置信号与槽函数self.tree.clicked.connect(self.ontreeclick)self.setCentralWidget(self.tree)def ontreeclick(self,index):i=self.tree.currentItem()print(index.row())print('key=%s,value=%s' %(i.text(0),i.text(1)))if __name__=="__main__":app=QApplication(sys.argv)p=treeevent()p.show()sys.exit(app.exec_())3、树控件增加、修改与删减节点'''树控件修改操作'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import QIcon,QBrush,QColorimport sysclass treechange(QWidget):def __init__(self):super(treechange,self).__init__()self.setWindowTitle("树控件的节点删减操作")self.resize(800,300)layout=QHBoxLayout()add=QPushButton("添加节点")update=QPushButton("修改节点")delete=QPushButton("删除节点")layout.addWidget(add)layout.addWidget(update)layout.addWidget(delete)add.clicked.connect(self.add1)update.clicked.connect(self.update1)delete.clicked.connect(self.delete1)# 创建树控件,设置列数为2self.tree = QTreeWidget()self.tree.setColumnCount(2)self.tree.setHeaderLabels(["key", "value"])root = QTreeWidgetItem(self.tree)root.setText(0, "root")root.setText(1, "1")c1 = QTreeWidgetItem(root)c1.setText(0, "child1")c1.setText(1, "2")c2 = QTreeWidgetItem(c1)c2.setText(0, "child2")c2.setText(1, "3")c3 = QTreeWidgetItem(c1)c3.setText(0, "child3")c3.setText(1, "4")# 为树节点设置信号与槽函数self.tree.clicked.connect(self.ontreeclick)layout1=QVBoxLayout(self)layout1.addLayout(layout)layout1.addWidget(self.tree)self.setLayout(layout1)#显⽰的系统的根⽬录model = QDirModel() # 当前的系统modeltree = QTreeView()tree.setModel(model)tree.setWindowTitle("QTreeView控件与系统控件")tree.resize(800, 1000)layout1.addWidget(tree)def ontreeclick(self, index):i = self.tree.currentItem()print(index.row())print('key=%s,value=%s' % (i.text(0), i.text(1)))#添加树节点def add1(self):print("添加节点")i=self.tree.currentItem() #获取当前节点print(i)node=QTreeWidgetItem(i) #为当前节点增加节点node.setText(0,"新节点")node.setText(1,"信值")#修改节点def update1(self):print("修改节点")node= self.tree.currentItem() # 获取当前节点node.setText(0, "修改节点")node.setText(1, "节点值已修改")#删除节点def delete1(self):print("删除节点")node = self.tree.currentItem() # 获取当前节点root=self.tree.invisibleRootItem() #根是不可见的,所以需要另外出来进⾏删除 if node in self.tree.selectedItems():(node.parent() or root).removeChild(node)if __name__=="__main__":app=QApplication(sys.argv)p=treechange()p.show()sys.exit(app.exec_())4、树控件QTreeview控件'''QTreeview控件与系统定制模式MODELQDirModel'''from PyQt5.QtWidgets import *from PyQt5.QtGui import *import sysif __name__=="__main__":app=QApplication(sys.argv)#显⽰当前的系统根⽬录的列表model=QDirModel() #当前的系统modeltree=QTreeView()tree.setModel(model)tree.setWindowTitle("QTreeView控件与系统控件")tree.resize(800,1000)tree.show()sys.exit(app.exec_())5、选项卡控件QTabWidget控件'''QTabWidget'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sysclass tabwidgetDemo(QTabWidget):def __init__(self):super(tabwidgetDemo,self).__init__()self.setWindowTitle("选项卡控件QTabWidget")self.resize(800,300)#创建⽤于显⽰控件的窗⼝self.tab1=QWidget()self.tab2=QWidget()self.tab3=QWidget()self.addTab(self.tab1,"选项卡1")self.addTab(self.tab2, "选项卡2")self.addTab(self.tab3, "选项卡3")self.tab1UI() #初始化第⼀个选项卡显⽰页⾯self.tab2UI()self.tab3UI()#第⼀个选项卡的页⾯设置def tab1UI(self):layout=QFormLayout()layout.addRow("姓名", QLineEdit())layout.addRow("地址",QLineEdit())self.setTabText(0,"联系⽅式") #设置第⼀个选项卡的标题为联系⽅式self.tab1.setLayout(layout)def tab2UI(self):layout1=QFormLayout()sex=QHBoxLayout()sex.addWidget(QRadioButton("男"))sex.addWidget(QRadioButton("⼥"))layout1.addRow(QLabel("性别"),sex)layout1.addRow("⽣⽇",QLineEdit())self.setTabText(1,"个⼈详细信息")self.tab2.setLayout(layout1)def tab3UI(self):layout2=QHBoxLayout()layout2.addWidget(QLabel("科⽬"))layout2.addWidget(QCheckBox("物理"))layout2.addWidget(QCheckBox("⾼数"))self.setTabText(2,"教育程度")self.tab3.setLayout(layout2)if __name__=="__main__":app=QApplication(sys.argv)p=tabwidgetDemo()p.show()sys.exit(app.exec_())6、堆栈窗⼝控件(选项卡控件2)QStackWidget堆栈窗⼝'''QStackWidget堆栈窗⼝'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sysclass stackwidgetDemo(QTabWidget):def __init__(self):super(stackwidgetDemo,self).__init__()self.setWindowTitle("堆栈控件QStackWidget")self.resize(1000,800)self.list=QListWidget()self.list.insertItem(0,"联系信息")self.list.insertItem(1,"个⼈信息")self.list.insertItem(2,"教育程度")self.list.currentRowChanged.connect(self.display)self.stack1=QWidget()self.stack2=QWidget()self.stack3=QWidget()self.stack=QStackedWidget()self.stack.addWidget(self.stack1)self.stack.addWidget(self.stack2)self.stack.addWidget(self.stack3)hb=QHBoxLayout()hb.addWidget(self.list)hb.addWidget(self.stack)self.setLayout(hb)def display(self,index):self.stack.setCurrentIndex(index)self.tab1UI() #初始化第⼀个选项卡显⽰页⾯self.tab2UI()self.tab3UI()#第⼀个选项卡的页⾯设置def tab1UI(self):layout=QFormLayout()layout.addRow("姓名", QLineEdit())layout.addRow("地址",QLineEdit())self.stack1.setLayout(layout)def tab2UI(self):layout1=QFormLayout()sex=QHBoxLayout()sex.addWidget(QRadioButton("男"))sex.addWidget(QRadioButton("⼥"))layout1.addRow(QLabel("性别"),sex)layout1.addRow("⽣⽇",QLineEdit())self.stack2.setLayout(layout1)def tab3UI(self):layout2=QHBoxLayout()layout2.addWidget(QLabel("科⽬"))layout2.addWidget(QCheckBox("物理"))layout2.addWidget(QCheckBox("⾼数"))self.stack3.setLayout(layout2)if __name__=="__main__":app=QApplication(sys.argv)p=stackwidgetDemo()p.show()sys.exit(app.exec_())7、停靠控件QDockWidget堆栈窗⼝'''QDockWidget堆栈窗⼝'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sysclass dockwidgetDemo(QMainWindow):def __init__(self):super(dockwidgetDemo, self).__init__()self.setWindowTitle("停靠控件QDockWidget")self.resize(1000, 800)layout=QHBoxLayout()self.dock=QDockWidget("Dockable",self)self.listwidget=QListWidget()self.listwidget.addItem("item1")self.listwidget.addItem("item2")self.listwidget.addItem("item3")self.dock.setWidget(self.listwidget)self.setCentralWidget(QTextEdit("编辑器"))#设置默认停靠在右边self.addDockWidget(Qt.RightDockWidgetArea,self.dock) self.dock.setFloating(True) #使其处于悬浮状态self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)p = dockwidgetDemo()p.show()sys.exit(app.exec_())8、容纳多⽂档窗⼝控件'''在主窗⼝中可以创建多个⽂档窗⼝,窗⼝容器A:QMdiArea 容纳多窗⼝类B:QMdiSubWindow 多窗⼝类B放⼊A中'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sysclass multiwindow(QMainWindow):count=0def __init__(self,parent=None):super(multiwindow, self).__init__(parent)self.setWindowTitle("容纳多⽂档窗⼝")self.mdi=QMdiArea() #创建⼀个多⽂档容纳器bar=self.menuBar() #创建⼀个菜单file=bar.addMenu("File")file.addAction("new")file.addAction("cascade")file.addAction("tiled")file.triggered.connect(self.windowaction)self.setCentralWidget(self.mdi)def windowaction(self,q):if q.text()=="new":#记录⼦窗⼝的数⽬multiwindow.count=multiwindow.count+1#x新建⼀个多⽂档窗⼝sub=QMdiSubWindow()sub.setWidget(QTextEdit())sub.setWindowTitle("⼦窗⼝"+str(multiwindow.count))#将多⽂档窗⼝放置在多⽂档容器中去self.mdi.addSubWindow(sub)sub.show()#重叠的排列⽅式elif q.text()=="cascade":self.mdi.cascadeSubWindows()#拼接的排列⽅式elif q.text()=="tiled":self.mdi.tileSubWindows()if __name__ == "__main__":app = QApplication(sys.argv)p = multiwindow()p.show()sys.exit(app.exec_())9、滚动条控件QScrollBar控件'''QScrollBar控件1.通过滚动条的值的变化来控制其他控件状态的变化2.通过滚动条值的变化控制控件位置的变化'''from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sysclass scrollbar(QWidget):count=0def __init__(self):super(scrollbar, self).__init__()self.initUI()def initUI(self):h=QHBoxLayout()bel=QLabel("拖动滚动条去改变⽂字颜⾊")h.addWidget(bel)self.scrol1=QScrollBar()self.scrol1.setMaximum(255)self.scrol1.sliderMoved.connect(self.slidemoved)self.scrol2 = QScrollBar()self.scrol2.setMaximum(255)self.scrol2.sliderMoved.connect(self.slidemoved)self.scrol3 = QScrollBar()self.scrol3.setMaximum(255)self.scrol3.sliderMoved.connect(self.slidemoved)self.scrol4 = QScrollBar()self.scrol4.setMaximum(255)self.scrol4.sliderMoved.connect(self.slidemoved1)h.addWidget(self.scrol1)h.addWidget(self.scrol2)h.addWidget(self.scrol3)h.addWidget(self.scrol4)self.y=bel.pos().y()self.setGeometry(300,300,300,200)self.setLayout(h)self.setWindowTitle("滚动条控件")#设置⼀些控件的状态def slidemoved(self):print(self.scrol1.value(),self.scrol2.value(),self.scrol3.value())p=QPalette()c=QColor(self.scrol1.value(),self.scrol2.value(),self.scrol3.value(),255) p.setColor(QPalette.Foreground,c)bel.setPalette(p)#设置⼀些控件的位置def slidemoved1(self):bel.move(bel.x(),self.y+self.scrol4.value())if __name__ == "__main__":app = QApplication(sys.argv)p = scrollbar()p.show()sys.exit(app.exec_())。
pyqt5 mainwindow方法全文共四篇示例,供读者参考第一篇示例:```pythonself.setWindowTitle('My App')self.setWindowIcon(QIcon('icon.png'))self.resize(800, 600)self.move(100, 100)```def keyPressEvent(self, event):if event.key() == Qt.Key_Escape:self.close()``````pythondef addCustomButton(self):button = QPushButton('Custom Button', self)button.clicked.connect(self.onCustomButtonClicked)button.move(10, 10)第二篇示例:```pythondef on_button_click():print('Button clicked')第三篇示例:1. setWindowTitle方法setWindowTitle方法用于设置主窗口的标题。
我们可以通过调用setWindowTitle方法并传入想要设置的标题来设置应用程序的主窗口标题。
例如:```self.setWindowTitle('My App')```这样就会将主窗口的标题设置为"My App"。
2. resize方法这样就会将主窗口的大小设置为宽度为800像素,高度为600像素。
3. show方法这样就会显示应用程序的主窗口。
这样就会将一个文本编辑框作为主窗口的中央部件。
5. statusBar方法这样就会在主窗口的状态栏中显示"Ready"。
6. addAction方法addAction方法用于向主窗口的菜单栏或工具栏中添加动作。
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信号和自定义的槽函数绑定起来。