搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

PyQt5入门(十五)容器控件

生成海报
油炸冰淇凌
油炸冰淇凌 2021-02-04 15:32
阅读需:0

文件目录

一.菜单栏控制QTabWidget

二.局部变量对话框控制QStackedWidget

三.停靠在控制QDockWidget

四.容下多文本文档的对话框


应用器皿控制的目地:使显示屏上面有大量的控制

 

一.菜单栏控制QTabWidget

什么叫菜单栏控制?

实例:

不一样的菜单栏控制相匹配了不一样的不一样的页面,就要也防止了物品过多一个网页页面忘不掉,也就是一个菜单栏相匹配一个对话框。

编码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class TabWidget(QTabWidget): #立即一全部显示屏便是一个菜单栏对话框
    def __init__(self,parent=None):
        super(TabWidget, self).__init__(parent)
        self.setWindowTitle('菜单栏控制:QTabWidget')
        self.resize(400,200)
        #建立用以表明控制的对话框
        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)#别忘记tab1便是一个对话框

    def tab2UI(self):
        layout=QFormLayout()
        sex=QHBoxLayout()#水准合理布局,横着排序
        #单选框
        sex.addWidget(QRadioButton('男'))
        sex.addWidget(QRadioButton('女'))
        layout.addRow(QLabel('性別'),sex)
        layout.addRow('生日',QLineEdit())
        self.setTabText(1,'本人详细资料')
        self.tab2.setLayout(layout)

    def tab3UI(self):
        layout=QHBoxLayout()
        layout.addWidget(QLabel('学科'))
        #勾选框
        layout.addWidget(QCheckBox('物理学'))
        layout.addWidget(QCheckBox('高数'))
        self.setTabText(2,'文化教育水平')
        self.tab3.setLayout(layout)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=TabWidget()
    main.show()
    sys.exit(app.exec_())

运作結果:

      

 

二.局部变量对话框控制QStackedWidget

根据数据库索引来转换网页页面

编码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class StackedExample(QWidget): #立即一全部显示屏便是一个菜单栏对话框
    def __init__(self,parent=None):
        super(StackedExample, self).__init__(parent)
        self.setWindowTitle('局部变量对话框控制:QStackedWidget')
        #self.resize(400,200)
        self.setGeometry(800,450,10,10)
        #目录控制
        self.list=QListWidget()
        self.list.insertItem(0,'联系电话')
        self.list.insertItem(1,'私人信息')
        self.list.insertItem(2,'文化教育水平')

        self.stack1=QWidget()
        self.stack2 = QWidget()
        self.stack3 = QWidget()

        self.tab1UI()
        self.tab2UI()
        self.tab3UI()
        #局部变量对话框控制目标
        self.stack=QStackedWidget()
        self.stack.addWidget(self.stack1)
        self.stack.addWidget(self.stack2)
        self.stack.addWidget(self.stack3)

        self.list.currentRowChanged.connect(self.display)

        hbox=QHBoxLayout()
        hbox.addWidget(self.list)
        hbox.addWidget(self.stack)
        self.setLayout(hbox)

    def tab1UI(self):
        #表格合理布局
        layout=QFormLayout()
        layout.addRow('名字',QLineEdit())
        layout.addRow('详细地址',QLineEdit())
        self.stack1.setLayout(layout)#别忘记tab1便是一个对话框

    def tab2UI(self):
        layout=QFormLayout()
        sex=QHBoxLayout()#水准合理布局,横着排序
        #单选框
        sex.addWidget(QRadioButton('男'))
        sex.addWidget(QRadioButton('女'))
        layout.addRow(QLabel('性別'),sex)
        layout.addRow('生日',QLineEdit())
        self.stack2.setLayout(layout)

    def tab3UI(self):
        layout=QHBoxLayout()
        layout.addWidget(QLabel('学科'))
        #勾选框
        layout.addWidget(QCheckBox('物理学'))
        layout.addWidget(QCheckBox('高数'))
        self.stack3.setLayout(layout)

    def display(self,index):
        #根据数据库索引来转换网页页面
        self.stack.setCurrentIndex(index)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=StackedExample()
    main.show()
    sys.exit(app.exec_())

运作結果:

 

三.停靠在控制QDockWidget

编码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class DockDemo(QMainWindow): #立即一全部显示屏便是一个菜单栏对话框
    def __init__(self,parent=None):
        super(DockDemo, self).__init__(parent)
        self.setWindowTitle('停靠在控制:QDockWidget')
        self.setGeometry(800,450,500,500)#x,y,w,h
        #self.resize(400, 200)

        layout=QHBoxLayout()
        #停靠在控制目标
        self.items=QDockWidget('Dockable',self)
        #目录控制
        self.listWidget=QListWidget()
        self.listWidget.addItem('item1')
        self.listWidget.addItem('item2')
        self.listWidget.addItem('item3')
        #将目录放进停靠在控制上
        self.items.setWidget(self.listWidget)

        self.setCentralWidget(QLineEdit('单行键入'))
        #设定一开始便是飘浮情况
        self.items.setFloating(True)

        #在对话框上设定停靠在控制,且飘浮在右边
        self.addDockWidget(Qt.RightDockWidgetArea,self.items)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=DockDemo()
    main.show()
    sys.exit(app.exec_())

运作結果:

      如同c语言编译器里的一些两侧的对话框一样,可随便拖拽,变小变大,替换部位等,自身试试吧!

 

四.容下多文本文档的对话框

等同于对话框的器皿,里边能够有很多子对话框,但子对话框只有在这里里边挪动。

必须的类:

容下多文本文档:QMdiArea
子对话框:       QMdiSubWindow

 

编码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


class MultiWindows(QMainWindow): #立即一全部显示屏便是一个菜单栏对话框
    count=0 #纪录当今有多少个菜单栏
    def __init__(self,parent=None):
        super(MultiWindows, self).__init__(parent)
        self.setWindowTitle('容下多文本文档的对话框')
        self.setGeometry(800,450,500,400)#x,y,w,h

        #容下多文本文档器皿目标
        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): #q是当今的点击菜单栏,根据按键名来开展不一样的实际操作
        if q.text()=='New':
            self.count=self.count+1
            #子对话框目标
            sub=QMdiSubWindow()
            sub.setWidget(QTextEdit())
            sub.setWindowTitle('子对话框'+str(self.count))
            self.mdi.addSubWindow(sub)
            sub.show()
        #下边2个是对mdi中现有的对话框排列开展实际操作,而不是转化成对话框
        elif q.text()=='cascade':
            self.mdi.cascadeSubWindows()
        elif q.text()=='Tiled':
            self.mdi.tileSubWindows()


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=MultiWindows()
    main.show()
    sys.exit(app.exec_())

运作結果:

  先随机生成(New)四个对话框,再试一下别的2个排版设计的实际效果 。

重合                       铺平

 

 

 

 

 

评论
  • 消灭零回复