PyQt5笔记之布局管理
代码:界面与逻辑分离
这是使用Designer做出的GUI,然后通过转换得到的Py代码。(界面文件)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'a.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(330, 190, 151, 141))
self.label.setText("Hello World")
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
这是手动创建的Py文件。(逻辑文件)
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from firstMainWin import * # 这是你designer转换后的py文件
class MyMainWindow(QMainWindow,Ui_MainWindow): # 继承自Ui_MainWindow类(designer转换后py文件里的类)
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyMainWindow()
win.show()
sys.exit(app.exec_())
案例:布局管理
提供了4中窗口布局方式,分别是:
Vertical Layout(垂直布局):控件默认按照从上到下的顺序进行纵向添加Horizontal Layout(水平布局):控件默认按照从左到右的顺序进行横向添加Grid Layout(栅格布局):将窗口控件放入一个网格之中,并合理规划分成若干行(row)和列(column),并放入合适的单元(cell)中Form Layout(表单布局):控件以两列的形式布局在表单中,其中左列包含标签,右列包含输入控件
一般进行布局有两种方式:一是通过布局管理器进行布局;二是通过容器控件进行布局
使用布局管理器布局
垂直布局
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
# 创建垂直布局
self.verticalLayout = QVBoxLayout(self)
# 设置控件边距
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.pushButton = QPushButton(self)
self.pushButton.setText("确认")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("取消")
self.verticalLayout.addWidget(self.pushButton1)
self.pushButton2 = QPushButton(self)
self.pushButton2.setText("完成")
self.verticalLayout.addWidget(self.pushButton2)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
水平布局
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
# 创建水平布局
self.verticalLayout = QHBoxLayout(self)
# 设置边距
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.pushButton = QPushButton(self)
self.pushButton.setText("确认")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("取消")
self.verticalLayout.addWidget(self.pushButton1)
self.pushButton2 = QPushButton(self)
self.pushButton2.setText("完成")
self.verticalLayout.addWidget(self.pushButton2)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
栅格布局
计算器模型
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QLineEdit
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
# 创建栅格布局
self.gridLayout = QGridLayout(self)
# 设置边距, 顺时针,分别是左,上,右,下。
self.gridLayout.setContentsMargins(5, 5, 5, 5)
# 创建输入框
self.lineEdit = QLineEdit(self)
# 添加到栅格布局并绑定坐标,x=0, y=0, height=1(高占1格), widgh=4(宽占4格)
self.gridLayout.addWidget(self.lineEdit, 0, 0, 1, 4)
# 创建按钮
self.pushButton1 = QPushButton(self)
# 设置按钮文本
self.pushButton1.setText("1")
self.gridLayout.addWidget(self.pushButton1, 1, 0, 1, 1)
self.pushButton2 = QPushButton(self)
self.pushButton2.setText("2")
self.gridLayout.addWidget(self.pushButton2, 1, 1, 1, 1)
self.pushButton3 = QPushButton(self)
self.pushButton3.setText("3")
self.gridLayout.addWidget(self.pushButton3, 1, 2, 1, 1)
self.pushButton4 = QPushButton(self)
self.pushButton4.setText("4")
self.gridLayout.addWidget(self.pushButton4, 2, 0, 1, 1)
self.pushButton5 = QPushButton(self)
self.pushButton5.setText("5")
self.gridLayout.addWidget(self.pushButton5, 2, 1, 1, 1)
self.pushButton6 = QPushButton(self)
self.pushButton6.setText("6")
self.gridLayout.addWidget(self.pushButton6, 2, 2, 1, 1)
self.pushButton7 = QPushButton(self)
self.pushButton7.setText("7")
self.gridLayout.addWidget(self.pushButton7, 3, 0, 1, 1)
self.pushButton8 = QPushButton(self)
self.pushButton8.setText("8")
self.gridLayout.addWidget(self.pushButton8, 3, 1, 1, 1)
self.pushButton9 = QPushButton(self)
self.pushButton9.setText("9")
self.gridLayout.addWidget(self.pushButton9, 3, 2, 1, 1)
self.pushButton10 = QPushButton(self)
self.pushButton10.setText("+")
self.gridLayout.addWidget(self.pushButton10, 1, 3, 1, 1)
self.pushButton11 = QPushButton(self)
self.pushButton11.setText("-")
self.gridLayout.addWidget(self.pushButton11, 2, 3, 1, 1)
self.pushButton12 = QPushButton(self)
self.pushButton12.setText("*")
self.gridLayout.addWidget(self.pushButton12, 3, 3, 1, 1)
self.pushButton13 = QPushButton(self)
self.pushButton13.setText("/")
self.gridLayout.addWidget(self.pushButton13, 4, 3, 1, 1)
self.pushButton14 = QPushButton(self)
self.pushButton14.setText("计算")
self.gridLayout.addWidget(self.pushButton14, 4, 0, 1, 3)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
表单布局
登录窗口模型
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFormLayout, QPushButton, QLabel, QLineEdit
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
# 创建表单布局
self.formLayout = QFormLayout(self)
# 设置边距
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.label = QLabel(self)
self.label.setText("账号")
self.formLayout.setWidget(0, 0, self.label)
self.lineEdit = QLineEdit(self)
self.formLayout.setWidget(0, 1, self.lineEdit)
self.label1 = QLabel(self)
self.label1.setText("密码")
self.formLayout.setWidget(1, 0, self.label1)
self.lineEdit1 = QLineEdit(self)
self.formLayout.setWidget(1, 1, self.lineEdit1)
self.pushButton = QPushButton(self)
self.pushButton.setText("确认")
self.formLayout.setWidget(2, 1, self.pushButton)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
使用容器进行布局
所谓容器布局,就是指能够容纳子控件的控件。使用容器控件,目的是将容器控件中的控件归为一类,以有别于其他控件,当然,容器控件也可以对其子控件进行布局,只不过没有布局管理其常用。
Frame容器
IP地址检测模型
尽管是使用了容器布局,但本质上还是使用了布局管理器进行的(通过下面self.verticalLayout.addWidge代码可以看出)
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFrame, QHBoxLayout, QVBoxLayout, QPushButton, QLineEdit, QLabel
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
self.setWindowTitle('IP Check Tools')
self.frame = QFrame(self)
self.frame1 = QFrame(self)
self.verticalLayout = QVBoxLayout(self)
self.horizontalLayout = QHBoxLayout(self.frame)
self.horizontalLayout1 = QHBoxLayout(self.frame1)
self.frames()
self.frames1()
self.verticalLayout.addWidget(self.frame)
self.verticalLayout.addWidget(self.frame1)
"""
首先创建了两个容器控件frame,和frame1;然后创建frame和frame1各自的水平布局,
frame:
1. 创建好属于frame的子控件,并添加到属于frame的水平布局中(self.horizontalLayout)
2. 将frame添加到属于QWidget的垂直布局中(self.verticalLayout.addWidget(self.frame))
frame1:
1. 创建好属于frame1的子控件,并添加到属于frame1的水平布局中(self.horizontalLayout1)
2. 将frame1添加到属于QWidget的垂直布局中(self.verticalLayout.addWidget(self.frame1))
"""
def frames(self):
self.label = QLabel(self.frame)
self.label.setText("IPv4")
self.horizontalLayout.addWidget(self.label)
self.lineEdit = QLineEdit(self.frame)
self.horizontalLayout.addWidget(self.lineEdit)
self.pushButton= QPushButton(self.frame)
self.pushButton.setText("Check")
self.horizontalLayout.addWidget(self.pushButton)
def frames1(self):
self.label1 = QLabel(self.frame1)
self.label1.setText("IPv6")
self.horizontalLayout1.addWidget(self.label1)
self.lineEdit1 = QLineEdit(self.frame1)
self.horizontalLayout1.addWidget(self.lineEdit1)
self.pushButton1 = QPushButton(self.frame1)
self.pushButton1.setText("Check")
self.horizontalLayout1.addWidget(self.pushButton1)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
尽量少用绝对布局
# 参数:控件x坐标,控件y坐标,控件宽度,控件高度
setGeometry(QtCore.QRect(100, 100, 400, 300))
控件间的间隔控件
垂直线
可显示的布局:
- 水平布局
- 栅格布局(独占一格)
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFrame, QHBoxLayout
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
self.line = QFrame(self)
self.line.setFrameShape(QFrame.VLine) # 设置形状
self.line.setFrameShadow(QFrame.Sunken) # 设置阴影
self.horizontalLayout = QHBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("Hello")
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("World")
self.horizontalLayout.addWidget(self.pushButton)
self.horizontalLayout.addWidget(self.line)
self.horizontalLayout.addWidget(self.pushButton1)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
水平线
可显示的布局:
- 垂直布局
- 栅格布局(独占一格)
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFrame, QVBoxLayout
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
self.line = QFrame(self)
self.line.setFrameShape(QFrame.HLine)
self.line.setFrameShadow(QFrame.Sunken)
self.verticalLayout = QVBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("Hello")
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("World")
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayout.addWidget(self.line)
self.verticalLayout.addWidget(self.pushButton1)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
间隔
注意,需占一格(控件)
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFrame, QGridLayout, QSpacerItem, QHBoxLayout
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUI()
def setupUI(self):
self.horizontalLayout = QHBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("A for a")
self.horizontalLayout.addWidget(self.pushButton)
# 设置间隔,表示:x=200, y=20,表示:x轴间隔200px, y轴间隔20px
spacerItem = QSpacerItem(200, 20)
self.horizontalLayout.addItem(spacerItem)
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("B for b")
self.horizontalLayout.addWidget(self.pushButton1)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
布局控件尺寸控制
minimumSize:最小尺寸,self.pushButton.setMinimumSize(QtCore.QSize(100, 100))maximumSize:最大尺寸,self.pushButton.setMaximumSize(QtCore.QSize(300, 300))sizePolicy:如果窗口控件在布局管理器中的布局不能满足我们的需求,那么就可以设置该窗口控件的sizePolicy来实现布局的微调,它也是每个窗口控件所特有的属性,不同窗口的sizePolicy可能不同sizeHint:尺寸提示,窗口控件的期望尺寸minimumSize:最小尺寸,窗口控件压缩时所能够被压缩到的最小尺寸Horizontal Policy:水平策略Vertical Policy:垂直策略
对于策略,相关解释如下:
Fixed:窗口控件具有其sizeHint所提示的尺寸且尺寸不会再改变Minimum:窗口控件的sizeHint所提示的尺寸就是它的最小尺寸;该控件不能被压缩得比这个值小,但可以变得更大Maximum:窗口控件的sizeHint所提示的尺寸就是它的最大尺寸;该控件不能被压缩得比这个值大,但它可以被压缩到minisizeHint给定的尺寸大小Preferred:窗口控件的sizeHint所提示的尺寸就是它的期望尺寸;该窗口控件可以缩小到minisizeHint所提示的尺寸,也可以变得比sizeHint所提示的尺寸还要大Expanding:窗口控件可以缩小到minisizeHint所提示的尺寸,也可以变得比sizeHint所提示的尺寸大,但它希望能够变得更大MinimumExpanding:窗口控件的sizeHint所提示的尺寸就是它的最小尺寸,该窗口控件不能被压缩的比这个值还小,但它希望能够变得更大Ignored:无视窗口控件的sizeHint和minisizeHint所提示的尺寸,按照默认来设置
语句为:
sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
栅格布局计算器模型
随着窗口大小而变化
# _*_coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QLineEdit, QSizePolicy
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setMinimumSize(480, 320)
#self.setMaximumSize(1280, 720) # 窗口最大像素
self.btnSizeMin_width = 70
self.btnSizeMin_height = 40
self.btnSizeMax_width = self.btnSizeMin_width * 999
self.btnSizeMax_height = self.btnSizeMin_height * 999
self.setupUI()
def setupUI(self):
self.gridLayout = QGridLayout(self)
self.gridLayout.setContentsMargins(10, 10, 10, 10)
self.lineEdit = QLineEdit(self)
self.lineEdit.setMinimumSize(30, 30) # 最小像素
self.lineEdit.setMaximumSize(999+999, 999) # 最大像素
self.gridLayout.addWidget(self.lineEdit, 0, 0, 1, 4)
self.pushButton1 = QPushButton(self)
self.pushButton1.setText("1")
self.pushButton1.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton1.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton1, 1, 0, 1, 1)
self.pushButton2 = QPushButton(self)
self.pushButton2.setText("2")
self.pushButton2.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton2.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton2, 1, 1, 1, 1)
self.pushButton3 = QPushButton(self)
self.pushButton3.setText("3")
self.pushButton3.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton3.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton3, 1, 2, 1, 1)
self.pushButton4 = QPushButton(self)
self.pushButton4.setText("4")
self.pushButton4.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton4.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton4, 2, 0, 1, 1)
self.pushButton5 = QPushButton(self)
self.pushButton5.setText("5")
self.pushButton5.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton5.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton5, 2, 1, 1, 1)
self.pushButton6 = QPushButton(self)
self.pushButton6.setText("6")
self.pushButton6.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton6.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton6, 2, 2, 1, 1)
self.pushButton7 = QPushButton(self)
self.pushButton7.setText("7")
self.pushButton7.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton7.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton7, 3, 0, 1, 1)
self.pushButton8 = QPushButton(self)
self.pushButton8.setText("8")
self.pushButton8.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton8.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton8, 3, 1, 1, 1)
self.pushButton9 = QPushButton(self)
self.pushButton9.setText("9")
self.pushButton9.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton9.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton9, 3, 2, 1, 1)
self.pushButton10 = QPushButton(self)
self.pushButton10.setText("+")
self.pushButton10.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton10.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton10, 1, 3, 1, 1)
self.pushButton11 = QPushButton(self)
self.pushButton11.setText("-")
self.pushButton11.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton11.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton11, 2, 3, 1, 1)
self.pushButton12 = QPushButton(self)
self.pushButton12.setText("*")
self.pushButton12.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton12.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton12, 3, 3, 1, 1)
self.pushButton13 = QPushButton(self)
self.pushButton13.setText("/")
self.pushButton13.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton13.setMaximumSize(self.btnSizeMax_width, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton13, 4, 3, 1, 1)
self.pushButton14 = QPushButton(self)
self.pushButton14.setText("计算")
self.pushButton14.setMinimumSize(self.btnSizeMin_width, self.btnSizeMin_height)
self.pushButton14.setMaximumSize(self.btnSizeMax_width + 999, self.btnSizeMax_height)
self.gridLayout.addWidget(self.pushButton14, 4, 0, 1, 3)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
PyQt5笔记之布局管理的更多相关文章
- Qt学习笔记-Widget布局管理
Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...
- Android学习笔记(10).布局管理器
布局管理器的几个类都是ViewGroup派生的,用于管理组件的分布和大小,使用布局管理器能够非常好地解决屏幕适配问题. 布局管理器本身也是一个UI组件,布局管理器能够相互嵌套使用,以下是布局管理器的类 ...
- pyqt笔记2 布局管理
https://zhuanlan.zhihu.com/p/28559136 绝对布局 相关方法setGeometry().move() 箱式布局 QHBoxLayout和QVBoxLayout是基本的 ...
- PyQt5之布局管理
目录 一 写在开头 1.1 本文内容 二 绝对布局 三 布局类 3.1 水平布局(QHBoxLayout)和垂直布局(QVBoxLayout) 3.2 水平布局和垂直布局实例 3.3 网格布局(QGr ...
- PyQt5教程——布局管理(4)
PyQt5中的布局管理 布局管理是GUI编程中的一个重要方面.布局管理是一种如何在应用窗口上防止组件的一种方法.我们可以通过两种基础方式来管理布局.我们可以使用绝对定位和布局类. 绝对定位 程序指定了 ...
- PyQt5——布局管理
PyQt5布局管理使用方法详见:https://blog.csdn.net/jia666666/article/list/3?t=1& PyQt5布局管理汇总: 1.QHBoxLayout 2 ...
- 四、PyQt5布局管理(绝对&相对、水平、垂直、格栅、表单)
目录 一.绝对布局 二.盒布局 三.格栅布局 四.格栅布局跨行跨列显示 布局管理即设置窗体上各个控件的位置,对于新手来说,这是学习的难点. 布局管理根据绝对坐标是否变动分为绝对布局和相对布局两大类.采 ...
- PyQT5速成教程-3 布局管理
本文由 沈庆阳 所有,转载请与作者取得联系! 布局(Layout)管理 Qt Designer中,在工具箱中最上方可以看到有4种布局.分别是垂直布局.水平布局.栅格布局和表单布局. 四种布局 布局 ...
- PyQt5(2)——调整布局(布局管理器)第一个程序
我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...
随机推荐
- wpf的控件树
转载自:控件树
- springcloud分布式事务Atomikos实例
0.JTA(Java Transaction Manager)的介绍 (1)jta与jdbc 简单的说 jta是多库的事务 jdbc是单库的事务 (2)XA与JTA XA : XA是一个规范或是一个事 ...
- csp201809-2 买菜
问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...
- 小鸟初学Shell编程(二)编写简单的Shell脚本
Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...
- 深入浅出《设计模式》之工厂模式(C++)
前言 模式介绍 在之前简单工厂模式中,我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则.如果在面馆中添加了烤海参,那将会修改waiter工厂类.违背了类内封闭原则. 还以面馆为例,现在两种面,用一个 ...
- FFT之频率与幅值的确定(转)
FFT之后得到的是什么数 FFT之后得到的那一串复数是波形对应频率下的幅度特征,注意这个是幅度特征不是复制,下面要讲两个问题:1.如何获取频率,2.如何获取幅值 获取频率 FFT变换如何获取频率?傅里 ...
- X264-libx264编码库
X264编码库libx264实现真正的视频编解码,该编解码算法是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换.量化,最后熵编码所得. 编码帧的类型分为I帧(x264_type_i).P帧( ...
- STM32F4 串口IAP程序要点
1. IAP(bootloader)程序 1.1 内部Flash地址分配 /* Start of the Flash address */ #define STM32_FLASH_BASE 0x080 ...
- windows 下 创建项目的虚拟环境
一. 为何使用虚拟环境 虚拟环境是Python解释器的一个私有副本,在这个环境你可以安装私有包,而且不会影响系统中安装的全局Python解释器. 在这个虚拟环境中的所有安装包,都是针对此环境的,不会被 ...
- 2-2array结构
In [1]: import numpy as np 对于ndarra结构来说,里面所有的元素必须 是同一类型的如果不是的话,会自动的向下进行转换 In [2]: tang_list=[1,2,3 ...