前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PyQt Tutorial]6.Layout Management(布局管理)

[PyQt Tutorial]6.Layout Management(布局管理)

作者头像
bsbforever
发布2020-08-19 10:52:37
7290
发布2020-08-19 10:52:37
举报
文章被收录于专栏:时悦的学习笔记

接下来这个专题介绍PyQt的一些内容

教程翻译自:

https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm

由于本人也是学习状态,翻译可能不准确,请及时指出,我会很快修正

一些关键字会直接使用英文

目前该专题为纯理论,实际操作在完成后有演示

1. 绝对位置

我们可以使用setGeometry() 方法设置widget在窗体上的位置和大小

代码语言:javascript
复制
import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()

   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)

   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

上面例子中

最外层Widget 300*200 像素大小 在显示器中位置为(10,10)

QPushButton 放在靠窗体右边50像素,窗体下面20像素的位置

绝对位置的劣处

  1. 当窗体改变大小时不会自动变化
  2. 不同设备不同分辨率上显示不一致
  3. 更改布局可能需要重新设计代码

2. 自动布局

PyQt 提供一种方便的自动的布局方式,他可以

  1. 窗体上的widget会随着窗体的大小改变而自动改变
  2. 确保不同设备不同分辨率有同意的显示
  3. 更改某个widget不用重新设计代码

如下为一些常用的布局方式

2.1 QBoxLayout

将widget 垂直或水平排列在一起

该布局通过如下2个类创建

  • QVBoxLayout 垂直排列
  • QHBoxLayout 水平排列

他们有如下方法:

addWidget()

增加一个widget到BoxLayout

addStretch()

增加一个空的空间到BoxLayout

addLayout()

增加另一个嵌套的BoxLayout

应用举例

代码语言:javascript
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QWidget()

   b1 = QPushButton("Button1")
   b2 = QPushButton("Button2")

   vbox = QVBoxLayout()
   vbox.addWidget(b1)
   vbox.addStretch()
   vbox.addWidget(b2)
   hbox = QHBoxLayout()

   b3 = QPushButton("Button3")
   b4 = QPushButton("Button4")
   hbox.addWidget(b3)
   hbox.addStretch()
   hbox.addWidget(b4)

   vbox.addStretch()
   vbox.addLayout(hbox)
   win.setLayout(vbox)

   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

下面的例子创建一个QVBoxLayout 和一个QHBoxLayout

各放置2个button 之后将hbox嵌套至vbox

更多例子请参考

https://www.tutorialspoint.com/pyqt/pyqt_qboxlayout_class.htm

2.2 QGridLayout

网格布局方式将widget按照表格(行列)的方式排列起来

我们可以将widget 放在制定的行和列中

可选的 我们还可以扩展行和列的大小,这样可使其相对于其他的widget更高和宽

它有如下方法

addWidget(QWidget, int r, int c)

在指定的行列增加widget

addWidget(QWidget, int r, int c, int rowspan, int columnspan)

在指定的行列增加widget并设定大小

addLayout(QLayout, int r, int c)

使用addLayout可以将其他layout插入到指定行列

应用举例

代码语言:javascript
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QWidget()
   grid = QGridLayout()

   for i in range(1,5):
      for j in range(1,5):
         grid.addWidget(QPushButton("B"+str(i)+str(j)),i,j)

   win.setLayout(grid)
   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

上面的程序首先新建一个QGridLayout

之后使用循环的形式增加QPushButton

2.3 QFormLayout

该布局可以让我们很方便的创建一个表单布局

即只有两列的网格布局

第一列为label 第二列为输入框

它有如下3个方法

addRow(QLabel, QWidget)

增加包含label和input的一行

addRow(QLabel, QLayout)

在第二列增加一个Layout

addRow(QWidget)

增加一个widget,该widget扩展在两列

应用举例

代码很简单,看下就行

代码语言:javascript
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QWidget()

   l1 = QLabel("Name")
   nm = QLineEdit()

   l2 = QLabel("Address")
   add1 = QLineEdit()
   add2 = QLineEdit()
   fbox = QFormLayout()
   fbox.addRow(l1,nm)
   vbox = QVBoxLayout()

   vbox.addWidget(add1)
   vbox.addWidget(add2)
   fbox.addRow(l2,vbox)
   hbox = QHBoxLayout()

   r1 = QRadioButton("Male")
   r2 = QRadioButton("Female")
   hbox.addWidget(r1)
   hbox.addWidget(r2)
   hbox.addStretch()
   fbox.addRow(QLabel("sex"),hbox)
   fbox.addRow(QPushButton("Submit"),QPushButton("Cancel"))

   win.setLayout(fbox)

   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅必备 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 绝对位置
  • 2. 自动布局
    • 2.1 QBoxLayout
      • 2.2 QGridLayout
        • 2.3 QFormLayout
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档