PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)

1、树控件的基本使用方法QTreeWidget‘‘‘QTreeWidget树控件的使用方法添加图标,添加表格,添加复选框等‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIcon,QBrush,QColorimport sys

class 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"]) #设置列标签

        #添加根节点1        root=QTreeWidgetItem(self.tree)        root.setText(0,"根节点")        root.setIcon(0,QIcon("./image/1.png"))        self.tree.setColumnWidth(0,300)

        #添加子节点1        n1=QTreeWidgetItem(root)        n1.setText(0,"子节点1")        n1.setText(1,"子节点的数据")        n1.setIcon(0,QIcon("./image/1.png"))        n1.setCheckState(0,Qt.Checked)  #添加复选框        #添加子节点2        n2=QTreeWidgetItem(root)        n2.setText(0, "子节点2")        n2.setText(1, "子节点2的数据")        n2.setIcon(0, QIcon("./image/1.png"))        n2.setCheckState(0, Qt.Checked)  # 添加复选框

        #为子节点再添加子节点2-1        n3 = 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 sys

class treeevent(QMainWindow):    def __init__(self):        super(treeevent,self).__init__()

        self.setWindowTitle("树控件的基本用法")        self.resize(800,300)

        #创建树控件,设置列数为2        self.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 sys

class 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)

        # 创建树控件,设置列数为2        self.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()  # 当前的系统model        tree = 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 sys

if __name__=="__main__":    app=QApplication(sys.argv)

    #显示当前的系统根目录的列表    model=QDirModel()  #当前的系统model    tree=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 sys

class 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 sys

class 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 sys

class 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 sys

class multiwindow(QMainWindow):    count=0    def __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 sys

class scrollbar(QWidget):    count=0    def __init__(self):        super(scrollbar, self).__init__()        self.initUI()    def initUI(self):        h=QHBoxLayout()        self.label=QLabel("拖动滚动条去改变文字颜色")        h.addWidget(self.label)

        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=self.label.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)        self.label.setPalette(p)

    #设置一些控件的位置    def slidemoved1(self):        self.label.move(self.label.x(),self.y+self.scrol4.value())

if __name__ == "__main__":    app = QApplication(sys.argv)    p = scrollbar()    p.show()    sys.exit(app.exec_())



原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12302955.html

时间: 2024-11-02 00:44:36

PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)的相关文章

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

专业的浏览和编辑管理CAD工程文档控件ABViewer

ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的浏览和编辑工具. 支持多种格式,如:DWG, DXF, DWF, Hewlett-Packard HPGL, PLT, HGL, CGM, SVG, TIFF, BMP, JPG, GIF etc 等. 具体功能: ABViewer它可以方便我们在下述几种情况下大大节省时间: 当您需要在您的MS Word 文档中导入CAD控件图像时 您可以获得比常规软件快两倍的CAD文件(DXF和DW

转:ExpressBars中的停靠控件使用

http://www.cnblogs.com/jxsoft/archive/2011/08/25/2152872.html 1          新手上路 1.1      控件简介 Dock panels Dock panels是建立停靠应用的最主要部分,是在应用内部的windows局部窗口,可以放置其他的VCL控件.当一个Dock panels放在Form上后,它会自动漂浮在Form之上.如果需要停靠到窗体中,需要使用TdxDockSite控件,并且可以设置主题风格. 注意,当要对Dock

JavaScript之DOM-4 文档结构和遍历(节点树、元素树、文档的遍历)

一.节点树 节点树 概念 - HTML DOM 将 HTML 文档视作树结构 - 文档中的元素.属性.文本.注释等都被看作一个节点 - 这种结构被称为节点树: 上下层节点 - 节点树中的节点彼此拥有层级关系,DOM 使用如下属性遍历整棵节点树: 平行的节点 - 节点树中使用如下方法访问平行的兄弟节点: 二.元素树 元素树 概念 - 元素树是节点树的一个子集,只包含其中的元素节点 上下层元素 - 与节点树一样,元素树上的元素节点也有父子关系,使用如下属性可以获取这些关系: 平行的元素 - 元素树使

老李推荐:第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树 6

这里如果你对java熟悉的话其实很简单,就是根据控件属性的名字对properties列表进行一次排序而已.如果你对java不熟悉的话,那就要先去查下Collections.sort这个方法是怎么回事了.顾名思义它提供的是对一个集合List的排序功能,但是根据什么来排序呢?这里就涉及到两个概念了: Comparator接口:提供的是一个接口,用户应该去实现该接口来提供列表中两个元素的对比功能 另外一个是匿名类:上面的new Comparator的写法就是建立一个实现了Comparator接口的匿名

未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配

信息: 未能加载视图状态.正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配.例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配. 数据源: System.Web 堆栈信息: 在 System.Web.UI.Control.LoadViewStateRecursive(Object savedState) 在 System.Web.UI.Control.LoadChildViewStateByIndex(ArrayLis

vb6中webbrowser控件树转换备忘

Dim doc As HTMLDocument Set doc = WebBrowser1.Document Dim inputs As IHTMLElementCollection Set inputs = doc.getElementsByTagName("input") vb6中webbrowser控件树转换备忘

WPF 控件库——可拖动选项卡的TabControl

原文:WPF 控件库--可拖动选项卡的TabControl 一.先看看效果 二.原理 1.选项卡大小和位置 这次给大家介绍的控件是比较常用的TabControl,网上常见的TabControl样式有很多,其中一部分也支持拖动选项卡,但是带动画效果的很少见.这也是有原因的,因为想要做一个不失原有功能,还需要添加动画效果的控件可不是一行代码的事.要做成上图中的效果,我们不能一蹴而就,最忌讳的是一上来就想实现所有效果. 一开始,我们最好先用Blend看看原生的TabControl样式模板部分是如何实现

黄聪:利用Aspose.Word控件实现Word文档的操作(转)

撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出