PyQt的布局管理器layout managers
提供了一种用户友好且高效的方式,可以在GUI上排列图形组件或小部件。正确布置窗口小部件将使您的GUI应用程序看起来更加优美和专业。学习有效地做到这一点是您使用Python和PyQt进行GUI应用程序开发和运行的一项基本技能。
在本教程中,您将学习:
使用PyQt的
layout managers
有什么好处如何使用PyQt的
layout managers
在GUI上以编程方式布置窗口小部件如何为您的GUI应用程序选择正确的
layout manager
如何在基于主窗口和基于对话框的应用程序中布置小部件
有了这些知识和技能,您就可以使用Python和PyQt创建具有专业外观的GUI应用程序。
在GUI上布置图形元素
在创建图形用户界面(GUI)应用程序时,一个常见的问题是如何使图形组件(按钮,菜单,工具栏,标签等)一致地放置在窗体和窗口上。此过程称为GUI布局(GUI layout,),这是创建GUI应用程序的重要步骤。
之前如果要在窗口上布置图形组件或窗口小部件,则可以采用以下方法之一:
为窗口上的每个小部件确定并手动设置静态大小和位置。
动态计算并设置每个小部件的大小和位置。
第一种方法相当直接,但是至少具有以下缺点:
您的窗口将无法调整大小,以不同的屏幕分辨率显示它们时可能会导致问题。
您的标签可能不能正确地支持本地化,因为给定文本的长度在不同语言之间会发生变化。
您的窗口小部件在不同平台上的显示方式将有所不同,这使得编写看起来不错的多平台应用程序变得困难。
第二种方法更灵活。但是,它也有缺点:
您必须进行大量手动计算才能确定每个小部件的正确大小和位置。
您必须做一些额外的计算才能正确响应窗口大小调整。
每当您修改窗口布局时,都必须重做所有计算。
即使您仍然可以使用这两种方法中的任何一种来布局GUI,大多数时候您可能还是希望使用由最先进的GUI框架或工具包实现的第三种且更方便的方法:布局管理器layout managers
。注意:在某些GUI框架(例如Tkinter)中,布局管理器也称为geometry managers
。
layout managers
会根据您的特定需求自动在GUI上排列小 部件。它避免了第一种方法的兼容性缺点以及第二种方法的复杂计算。
在以下各节中,您将了解PyQt的内置布局管理器以及如何使用它们有效地布局GUI应用程序的图形组件。
多样的PyQt布局形式
在PyQt中,小部件是用作GUI应用程序构建块的图形组件。将一堆小部件放在窗口上以创建GUI时,需要给它们一些顺序。您需要设置窗口小部件的大小和在窗口上的位置,还需要定义当用户调整基础窗口大小时它们的行为。
注意:PyQt5的官方文档中有一些不完整的部分。要解决此问题,您可以查看PyQt4文档,Qt for Python文档或原始Qt文档。
要在PyQt的窗口或窗体上排列小部件,可以使用以下技术:
在小部件上使用
.resize()
和.move()
来提供绝对大小和位置。重新实现
.resizeEvent()
并动态计算小部件的大小和位置。使用布局管理器,让他们为您做所有的计算和辛苦的工作。
这些技术通常对应于上一节中介绍的用于布局GUI的三种不同方法。
再说一次,动态计算尺寸和位置可能是个好方法,但是大多数时候,使用布局管理器会更好。在PyQt中,布局管理器是提供所需功能以自动管理布局中小部件的大小,位置和调整大小行为的类。
使用布局管理器,您可以自动在任何母部件、容器、小部件内排列子部件。使用布局管理器将确保您充分利用GUI上的可用空间,并确保当用户调整窗口大小时,应用程序仍然可用。
布局管理器充当小部件和其他布局的容器时,要将小部件添加到布局管理器,请在当前布局上调用.addWidget()
。要将布局添加到另一个布局,请在当前布局上调用.addLayout()
。您将在“嵌套布局以构建复杂的GUI”一节中更深入地了解嵌套布局。
将所有必需的小部件添加到布局管理器后,即可使用.setLayout()
在给定的小部件上设置布局管理器。您可以在QWidget
的任何子类(包括窗口或窗体)上设置布局管理器。
注意:QMainWindow
是