QT中有九种容器组件,分别是组合框QGroupBox、滚动区QScrollArea、工具箱QToolBox、选项卡QTabWidget、控件栈QWidgetStack、框架QFrame、组件QWidget...分组框的标题通常在上方显示,其位置可以设置为靠左、居中、靠右、自动调整这几种方式之一。...,如果子控件的尺寸超过了框架的大小,可以使用滚动条,方便查看整个子控件。...的子控件 (3)示例 #include "mainwindow.h" #include #include #include QGroupBox> #...添加到滚动区 pSCrollArea->setWidgetResizable(true); // 设置滚动区大小 pSCrollArea->setBackgroundRole(QPalette
如果只是简单控件,那么一旦设置背景颜色,整个滑块和滑块的拇指都是一个颜色,显然对用户不太友好,而将两个简单控件组成复杂控件,这样就可以单独对某一个小控件进行样式调整,大大提示美感。 ?...关于所有的子控件,大家可以点击文末地址,也可以使用软件。 七.解决冲突 当多个样式规则使用不同的值指定相同的属性时,就会发生冲突。...(= c) 忽略伪元素[即子控件 ]。...如果我们写了,结果将是相同的 myPushButton->setStyleSheet("color: blue"); 除非QPushButton有子级(这不太可能),否则样式表对它们没有影响。...如果要在QGroupBox及其子级上设置颜色,可以编写: qApp->setStyleSheet("QGroupBox, QGroupBox * { color: red; }"); 相反,设置字体并使用
通过在对话框中使用多个标签,可以将信息分为不同的类别,同时仍可访问。...我们在不使用父窗口小部件的情况下构造了这些窗口中的每一个,因为选项卡窗口小部件会在将它们添加到父窗口小部件时使它们重新定位。 ...QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); 我们将选项卡小部件布置在对话框中按钮上方...->addStretch(1); setLayout(mainLayout); } PermissionsTab类定义 像GeneralTab一样,PermissionsTab只是用作其子级的占位小部件...*ownerGroup = new QGroupBox(tr("Ownership")); QLabel *ownerLabel = new QLabel(tr("Owner"));
就是将组合框内的控件标识为一组控件来使用,即一次只能选择其中的一个控件:如性别选择,当选择男时,女不被选择;当选择女时男不被选择 clicked(): 点击QGroupBox控件时,发射该信号; toggled...(): 当QGroupBox的状态发生了改变时,发射该信息 import sys from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap...setWidget(): 设置控件为QScrollArea的子控件; takeWidget():删除QScrollArea的子控件; widget(): 返回QScrollArea的子控件; setWidgetResizable...(): 设置为true,则滚动区域部件将自动调整,以避免可以不显示的滚动条,或者利用额外的空间; widgetResizable(): 获得区域里的控件是否自动可调的设置; ensureVisible(...(QFrame.Shadow):设置边框阴影 setFrameStyle(int style):设置边框样式 setFrameRect(QRect):设置边框矩形 QFrame 没有特有信号,所有信号继承自父类
当可用空间发生变化时,这些布局将自动调整widgets的位置和大小,以确保它们布局的一致性和用户界面主体可用。 所有QWidget的子类都可以用布局来管理它们的子类。...当布局通过这种方式设置到widget,它将负责以下任务: l 子widget的定位 l 窗口的合理默认空间 l 窗口的合理最小空间 l 调整大小处理 l 当内容发生变化时自动调整 n 字体、...在布局上,可以使用addLayout来嵌套布局;被嵌套的布局,将变成上层布局的子布局。 向布局添加widgets 添加布局到widgets时,布局过程执行如下: 1....当widget整理到一个布局中时,它们将根据QWidget::sizePolicy()或者最小大小hint(取决于谁更大)分配一定空间。拉伸系数被用于按比例改变widget的分配空间。...这个可以通过将问题控件作为子类来解决,并实现合适的sizeHint()和minimumSizeHint()函数。 在一些情况下,当布局被添加到widget时需要特别注意。
QGroupBox QGroupBox的标题用::title子组件进行定制,标题的位置依QGroupBox::textAlignment的具体值而言。...QLabel QLabel不支持:hover伪状态,自Qt4.3开始,给QLabel设置样式表也就隐式指定了QFrame::frameStyle属性。...::groove子组件是一条槽,供::handle在上面滑动。 QSplitter 窗体分割器,主要的部件是::handle。通过::handle可以动态改变分割器中的不同子窗口大小。...QTreeView(QTreeWidget) show-decoration-selected属性控制选中时是选中整项还是仅仅只是项的文本, 子组件::branch和::item用于精细化控制。...我们将所有的样式语句放到一个*.qss文件中,然后在main函数中加载。需要注意的是,我们应该将.qss文件添加到.qrc文件中进行编译。每一次修改.qss文件之后应该重新编译.qrc文件。
QtWidgets模块 包含了一整套UI元素控件,用于建立符合系统风格的Classic界面,非常方便,可以在安装时选择是否使用此功能。...CheckBox ckbox TimeEdit time QtCore模块常用类 pyqtSignal:信号函数,一般跟槽配合使用 pyqtSlot:槽函数,一般跟信号配合使用 QSize:用来设置控件尺寸大小...QMainWindow:继承自QWidget类,是一个顶层窗口,它可以包含很多界面元素,如菜单栏、工具栏、状态栏、子窗口等。...QMdiSubWindow:子窗口类,跟QMdiArea配合使用 QWidget:所有用户界面对象的基类,所有的窗口或控件都直接或间接的继承自它。...:继承自QWidget,主要用来控制一些边框样式:凸起,凹下,阴影,线宽 QSizePolicy:尺寸策略类,用于布局管理器 QGroupBox:分组框控件类 QTextEdit:文本框控件类,支持多行输入
导读 单选按钮(QRadioButton)和复选框(QCheckBox)是界面设计中的重要元素。...在这里,我们将一组单选按钮全部放到了一个QGroupBox里面。这样,当一个按钮选中的时候其他选中的按钮将被自动取消。但是缺点是:如果我们想要获取当前被选中的按钮是哪一个,不太方便判断。...另外的一个方法是,将这一组单选按钮全部添加到QButtonGroup中去。...height: 13px; } QRadioButton::indicator::unchecked { # 未选中时状态,也即正常状态 image: url(:/images/...radiobutton_unchecked.png); } QRadioButton::indicator:unchecked:hover { # 未选中时,鼠标悬停时的状态 image:
QTableWidget 是 QTableView 的子类,对 QTableView 进行了扩展,将 Model 进行了封装,不需要用户手动创建 Model 对象,直接就可以往 QTableWidget...参数是当前选中元素的行数 itemClicked(QListWidgetItem* item) 点击某个元素时触发 itemDoubleClicked(QListWidgetItem* item) 双击某个元素时触发...Group Box – 分组框 使用 QGroupBox 实现一个带有标题的分组框,可以把其他的控件放到里面作为一组,这样看起来能更好看一点。...的方式来设定的,也就是每个控件所在的位置都需要计算坐标,最终通过 setGeometry 或者 move 方式摆放过去 这种设定方式其实并不方便,尤其是界面如果 内容比较多,不好计算,而且一个窗口大小往往是可以调整的...,设置或获取布局中各元素之间的默认间隔 Layout 只是用于界面布局,并没有提供信号 【使用 QVBoxLayout 管理多个控件】 编写代码,创建布局管理器和三个按钮,并且把按钮添加到布局管理器中
在设计应用程序界面时,使用状态栏有助于提升用户体验。...下面是 QStatusBar 的一些常用方法,以表格形式概述它们的功能: 方法 描述 addPermanentWidget(QWidget *widget, int stretch = 0) 将一个永久部件添加到状态栏...addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = 0) 将一个部件添加到状态栏,并可以设置部件在状态栏中的拉伸因子和对齐方式...addPermanentWidget(QWidget *widget, int stretch = 0) 将一个永久部件添加到状态栏,并可以设置部件在状态栏中的拉伸因子。...qint32 count = pro->value(); count = count - 10; pro->setValue(count); } 运行后效果如下图所示,当点击递增进度时子等增加
QHBoxLayout类中的常用方法如下表所示: 在创建QHBoxLayout布局时用到的对齐方式参数如下表所示: 通过一个例子,了解水平布局使用,示例代码如下所示: import sys from...通常可以使用函数addWidget()将被管理的控件(Widget)添加到窗口中,或者使用addLayout()函数将布局(Layout)添加到窗口中。...个QWidget控件添加到全局变量中,最后,把全局布局应用到窗口本身。...QSplitter 允许用户通过拖动子控件的边界来控制子控件的大小,并提供了一个处理拖曳子控件的控制器。...() topleft.setFrameShape(QFrame.StyledPanel) bottom = QFrame() bottom.setFrameShape(QFrame.StyledPanel
流式布局 所谓流式布局指的是容器中的元素像流水一样,是可以浮动的,当元素一行或者一列占满的时候,它会自动流入到下一行或者下一列。...pyqt5流式布局 pyqt中采用流式布局的方法原理是,通过contentsMargins获取到子元素距离布局的上下左右宽度,然后我们将所有子元素进行遍历,如果它加上边距可以在一行放入的话,那么就放在一行内...滚动条的使用方法 首先,我们需要声明QScrollArea 然后,我们需要设置QScrollArea的位置大小 最后,我们将需要产生滚动条的元素放入它的内部。...Layout Scroll") class FlowLayout(QLayout): """流式布局,使用说明 1.声明流式布局 layout = FlowLayout 2.将元素放入流式布局中...3.将QGroupBox应用流式布局 4.如果期望水平流式,将QGroupBox放入到QHBoxLayout,如果期望垂直布局,将QGroupBox放入到QVBoxLayout
创建 style.qss ⽂件, 并添加到 resource.qrc 中. style.qss 是需要程序运⾏时加载的....这个怀疑是 Qt 本⾝的 bug, 暂时只能先使⽤ alignment 来⼿动调整下. 执⾏程序, 可以看到如下效果. 我们就得到了⼀个红⾊的进度条....把上述控件添加⼀个⽗元素 QFrame, 并设置 QFrame 和 窗⼝⼀样⼤. 顶层窗⼝的 QWidget ⽆法设置背景图⽚. 因此我们需要再套上⼀层 QFrame....这些代码设置到 QFrame 的属性中即可。...通常我们建议把样式代码集中放置, ⽅便调整和排查 QFrame { border-image: url(:/cat.jpg); } QLineEdit { color
'__main__': app = QApplication(sys.argv) ex = Example() # 进入应用的主循环中,调用exit()方法或直接销毁主控件时,...触发QDate的点击信号,绑定自定义函数 cal.clicked[QDate].connect(self.showDate) # 将日历添加到垂直布局 vbox.addWidget...QLabel(self) # 设置为当前日期 date = cal.selectedDate() self.lbl.setText(date.toString()) # 将标签添加到垂直布局...lbl.setPixmap(pixmap) # 将标签添加到水平布局 hbox.addWidget(lbl) # 向窗口添加水平布局 self.setLayout...(QFrame.StyledPanel) bottom = QFrame(self) bottom.setFrameShape(QFrame.StyledPanel) # 创建一个
,通过将内容组件传递给布局组件的某个属性来完成 child: 单个组件添加布局时使用。...例如:Center、Container children 多个组件添加布局时使用。例如:Row,Column 等 将布局组件添加到页面组件里,一般在build方法里完成。...start, //将子控件放在主轴的结束位置 end, //将子控件放在主轴的中间位置 center, //将主轴空白位置进行均分,排列子元素,手尾没有空隙 spaceBetween...{ //子元素尽量扩大化展示,占据满足父元素布局的全部空间 max,(默认) //子元素尽量紧凑的展示,空间尽可能满足所有子元素即可 min, } 子组件相对大小 Expanded...在同一层级中的Expanded组件,通过控制参数flex来调整同一父组件下子组件的大小比例。
布局管理 QHBoxLayout 水平 QVBoxLayout 垂直 QGridLayout 网格 QFormLayout 表单布局,两列的形式 addLayout() 插入子布局 addWidget(...app = QApplication(sys.argv) demo = Example() demo.show() sys.exit(app.exec_()) 缺点: 窗口大小变动时...,控件大小和位置不会随动 3....form_layout.addRow('name', QLineEdit()) form_layout.addRow('age', QLineEdit()) # 局部布局 添加到...QSplitter 布局 可以动态拖动子控件之间的边界,默认是横向布局 # _*_ coding: utf-8 _*_ # @Time : 2022/6/5 17:31 # @Author : Michael
Minimum GrowFlag 指定最小值策略: Qwidget. sizeHint()对应的缺省大小是最小值,不能调整部件大小到比缺省大小更小的尺寸,并且该值应该足够满足部件的展现。...Lay Out in a Grid:将窗体上所选组件网格布局 ?Break Layout:解除窗体上所选组件的布局,也就是打破布局。 ?Adjust Size:自动调整所选组件的大小。...属性中的opaqueResize默认情况下(打勾),使用鼠标拖动分割子窗口间的边界时,子窗口会动态的改变其大小。...上图的frame是一个窗体的对象名,选择器若为具体的类实例对象名,应在前面使用#来表示,也可将图中的#frame改为QFrame(类型名),区别是前者仅对具体的一个窗体起作用效果,而后者是所有QFrame...子控件 ?
当 QLabel 文本内容包含 URL 时,点击链接将尝试打开浏览器访问该 URL。 buddy 给 QLabel 关联一个“伙伴”,点击 QLabel 时能激活对应的伙伴控件。...Qt 框架内部管理着 QWidget 对象表示我们的窗口,在窗口大小发生改变时,Qt 就会自动调用 resizeEvent 函数 但是由于实际上这个表示窗口的并非是 QWidget,而是 QWidget...QFrame::Panel:带有可点击区域的面板边框 QFrame::WinPanel:Windows 风格的边框 QFrame::HLine:水平线边框 QFrame::VLine:垂直线边框 QFrame...而我们自己创建的线程则不是,当我们自己的线程中尝试对界面元素进行修改时,Qt 程序往往会直接崩溃。...这样的约定主要是因为 GUI 中的状态往往是牵一发动全身的,修改一个地方,就需要同步的对其他内容进行调整。 比如调整了某个元素的尺存,就可能影响到内部的文字位置,或者其他元素的位置。
我们回忆一下AVL树,它在插入和删除节点时,总要保证任意节点左右子树的高度差不超过1。正是因为有这样的限制,插入一个节点和删除一个节点都有可能调整多个节点的不平衡状态。...2-3树查找元素 2-3树的查找类似二分搜索树的查找,根据元素的大小来决定查找的方向。...向2-节点中插入元素 如果未命中查找结束于2-节点,直接将2-节点替换为3-节点,并将待插入元素添加到其中。 ?...向一颗只含有一个3-节点的树中插入元素 如果命中查找结束于3-节点,先临时将其成为4-节点,把待插入元素添加到其中,然后将4-节点转化为3个2-节点,中间的节点成为左右节点的父节点。...如果左子节点不是2-节点,完成; 2. 如果左子节点是2-节点,而兄弟节点不是2-节点,将兄弟节点的最小元素移到父节点,父节点的最小元素移到左子节点; 3.
假设队列是非空的,那么具有最低值的元素在queue[0]。 优先级队列的数据结构是一个平衡二叉树,并且数中所有的子节点必须大于等于父节点,而同一层子节点间无需维护大小关系。...插入操作必要的话是会导致堆元素调整的,以满足父节点总是小于等于子节点的要求。...当待删除节点的位置为非叶子节点时,会进行一系列的节点调整,使得队尾节点在前插后能保证优先级队列数据结构的正确性。...当待删除节点的位置为叶子节点时,会先将队尾节点设置到待删除节点位置以使得队列中已经没有待删除节点了,然后再进行已经插入到新位置的队尾节点同它新父节点进行比较调整,以保证父节点总是小于等于子节点,即保证优先级队列数据结构的正确性...这是因为当在迭代器中执行remove操作时,可能会涉及到一个未访问的元素被移动到了一个已经访问过的节点位置(删除操作时,当队尾节点被放置到待移除节点位置的情况下,需要调用siftUp方法,siftUp(
领取专属 10元无门槛券
手把手带您无忧上云