Python pyQt4/PyQt5 学习笔记3(绝对对位,盒布局,网格布局)
2018-01-09 22:30
645 查看
本节研究布局管理的内容。
(一)绝对对位
运行效果:
在这种方式中,编程者指定各种部件的位置和大小。但是当你使用绝对定位时,需要知道有以下的限制:
- 如果我们改变窗口的大小,部件的大小和位置并不会改变。
- 你的应用在不同平台下可能长得不太一样。
- 改变应用中使用的字体可能会扰乱布局。
- 如果我们想改变现有的布局的话,我们必须完全重写布局,这很乏味而且浪费时间。
PyQt5相同功能的例子:(macOS版本)
(二)盒布局(Box layout)
效果如下:
这个例子中我们将两个按钮放在了窗口的右下角。即使我们改变窗口的大小,它们也会在那个地方
相同功能的PyQt5的例子:(macOS例子)
(三)网格布局
(三)一个网格布局的例子
(一)绝对对位
import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lbl1 = QtGui.QLabel('ZetCode', self) lbl1.move(15, 10) lbl2 = QtGui.QLabel('tutorials', self) lbl2.move(35, 40) lbl3 = QtGui.QLabel('for programmers', self) lbl3.move(55, 70) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Absolute') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
运行效果:
在这种方式中,编程者指定各种部件的位置和大小。但是当你使用绝对定位时,需要知道有以下的限制:
- 如果我们改变窗口的大小,部件的大小和位置并不会改变。
- 你的应用在不同平台下可能长得不太一样。
- 改变应用中使用的字体可能会扰乱布局。
- 如果我们想改变现有的布局的话,我们必须完全重写布局,这很乏味而且浪费时间。
PyQt5相同功能的例子:(macOS版本)
import sys from PyQt5.QtWidgets import QWidget,QApplication,QLabel class Example(QWidget): def __init__(self): super(Example,self).__init__() self.initui() def initui(self): lab1=QLabel('blue',self) lab1.move(15,10) lab2=QLabel('red',self) lab2.move(35,40) lab3=QLabel('green',self) lab3.move(55,70) self.setGeometry(300,300,250,150) self.setWindowTitle('testSample') self.show() def main(): app=QApplication(sys.argv) ex=Example() sys.exit(app.exec_()) if __name__=='__main__': main()
(二)盒布局(Box layout)
import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): okButton = QtGui.QPushButton("OK") cancelButton = QtGui.QPushButton("Cancel") hbox = QtGui.QHBoxLayout() hbox.addStretch(1) hbox.addWidget(okButton) hbox.addWidget(cancelButton) vbox = QtGui.QVBoxLayout() vbox.addStretch(1) vbox.addLayout(hbox) self.setLayout(vbox) self.setGeometry(300, 300, 300, 150) self.setWindowTitle('Buttons') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
效果如下:
这个例子中我们将两个按钮放在了窗口的右下角。即使我们改变窗口的大小,它们也会在那个地方
相同功能的PyQt5的例子:(macOS例子)
import sys from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QHBoxLayout,QVBoxLayout class Exaple(QWidget): def __init__(self): super().__init__() self.initui() def initui(self): btn1=QPushButton("OK") btn2=QPushButton("Cancel") #QHBoxLayout和QVBoxLayout两个布局类。 #这里我们创建了一个水平箱布局,并且增加了一个拉伸因子和两个按钮。 # 拉伸因子在两个按钮之前增加了一个可伸缩空间。这会将按钮推到窗口的右边。 hbox=QHBoxLayout() hbox.addStretch(1) hbox.addWidget(btn1) hbox.addWidget(btn2) #我们把水平布局放置在垂直布局内。 # 拉伸因子将把包含两个按钮的水平箱布局推到窗口的底边。 vbox=QVBoxLayout() vbox.addStretch(1) vbox.addLayout(hbox) self.setLayout(vbox) self.setGeometry(300,300,300,150) self.show() if __name__=='__main__': app=QApplication(sys.argv) ex=Exaple() sys.exit(app.exec_())
(三)网格布局
#网格布局演示,PyQt5,macOS的例子 import sys from PyQt5.QtWidgets import QApplication,QWidget,QGridLayout,QPushButton class Example(QWidget): def __init__(self): super().__init__() self.initui() def initui(self): #创建了一个全是按钮的网格布局。并且把这个类设为应用窗口的布局 grid=QGridLayout() self.setLayout(grid) names=['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] pos=[(i,j) for i in range(5) for j in range(4)] for p,name in zip(pos,names): if name=='': continue #创建出按钮组件,并使用addWidget()方法向布局中添加按钮。 button=QPushButton(name) grid.addWidget(button,*p) self.move(300,150) self.setWindowTitle('calc') self.show() if __name__=='__main__': app=QApplication(sys.argv) ex=Example() sys.exit(app.exec_())
(三)一个网格布局的例子
import sys from PyQt5.QtWidgets import (QWidget,QLabel,QLineEdit,QTextEdit,QGridLayout,QApplication) class Exaple(QWidget): def __init__(self): super().__init__() self.initui() def initui(self): #包含三个标签,两个单行编辑框和一个文本编辑框组件的窗口。 # 布局使用了QGridLayout布局 title=QLabel('Title') author=QLabel('Author') review=QLabel('Review') titleEdit=QLineEdit() authorEdit=QLineEdit() reviewEdit=QTextEdit() #创建了一个网格布局并且设置了组件之间的间距 grid=QGridLayout() grid.setSpacing(10) grid.addWidget(title,1,0) grid.addWidget(titleEdit,1,1) grid.addWidget(author,2,0) grid.addWidget(authorEdit,2,1) grid.addWidget(review,3,0) #如果我们向网格布局中增加一个组件,我们可以提供组件的跨行和跨列参数。 # 在这个例子中,我们让reviewEdit组件跨了5行。 grid.addWidget(reviewEdit,3,1,5,1) self.setLayout(grid) self.setGeometry(300,300,300,300) self.setWindowTitle('Review') self.show() if __name__=='__main__': app=QApplication(sys.argv) ex=Exaple() sys.exit(app.exec_())
相关文章推荐
- 绝对布局AbsoluteLayout学习笔记
- swing 学习笔记十二(网格布局GridLayout)
- swing 学习笔记十二(网格布局GridLayout)
- [python学习笔记] pyinstaller打包pyqt5程序无法运行
- python学习笔记4:PyQt5的安装
- 原生 CSS 网格布局学习笔记
- PyQt4 学习笔记3之布局管理
- GTK学习笔记之网格布局GtkGrid(3)
- Python学习笔记,我的一个PyQt工程,一:Python是什么鬼?
- Python学习笔记,我的一个PyQt工程,一:Python是什么鬼?
- CSS学习笔记:使用绝对定位实现横向两列布局
- PyQt学习笔记01-Qt基本概念进阶篇之窗口布局,对话框
- Python pyQt4/PyQt5 学习笔记4(事件和信号)
- Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)
- 学习笔记十五--python3.6+pycharm2017.2.3+pyqt5的配置与使用
- Eric6与pyqt5学习笔记 3【水平/垂直,网格,窗体四大类布局】
- Pyqt4学习笔记-布局
- 原生CSS网格布局学习笔记
- python学习笔记之PyQt环境的搭建
- Python学习笔记-pyqt1