搜尋
首頁後端開發Python教學PyQt5每天必學之佈局管理
PyQt5每天必學之佈局管理Apr 19, 2018 pm 01:50 PM
pyqt5佈局管理

這篇文章主要為大家詳細介紹了PyQt5每天必學之佈局管理的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在GUI編程中有一個不容忽視的部分,那就是佈局管理。佈局管理掌控著我們的控制項在應用程式視窗如何擺放。佈局管理可以透過兩種方式來完成。我們可以使用絕對定位或佈局類別兩種方法來控製程式視窗中的控制項位置。

絕對定位

每個控制項會依照程式設計師指定的位置放置。當您使用絕對定位,我們要了解以下限制:

  • 如果我們調整視窗的大小控制項的大小和位置保持不變

  • 在不同平台上應用程式看起來可能會不同

  • 更改字體可能會破壞應用程式的佈局

  • ##如果決定改變佈局,我們必須每個控制項徹底的加以修改,這是繁瑣且耗時的


#下面的範例就是控制項的絕對座標定位方式。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
PyQt5 教程

这个例子显示了在窗口中使用绝对定位的三个标签。

作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年7月31日
"""

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel

class Example(QWidget):

 def __init__(self):
  super().__init__()

  self.initUI()

 def initUI(self):

  lbl1 = QLabel('我的世界你曾经来过', self)
  lbl1.move(15, 10)

  lbl2 = QLabel('CSND博客', self)
  lbl2.move(35, 40)

  lbl3 = QLabel('程序员', self)
  lbl3.move(55, 70)

  self.setGeometry(300, 300, 250, 150)
  self.setWindowTitle('绝对定位')  
  self.show()

if __name__ == '__main__':

 app = QApplication(sys.argv)
 ex = Example()
 sys.exit(app.exec_())

在我們的範例中使用的都是標籤(Label)。我們透過提供x和y座標值來定位它們。座標系的原點是控件的左上角。 x值增長是從左到右。 y值增長是從上到下。

lbl1 = QLabel('我的世界你曾经来过', self)
lbl1.move(15, 10)

標籤控制項被放置在 x=15 和 y=10。

程式執行後


PyQt5每天必學之佈局管理

Box layout盒子佈局

佈局管理使用佈局類別的方式更加靈活、實用。它是將一個控制項放在視窗中的首選方式。 QHBoxLayout和QVBoxLayout分別是水平和垂直對齊控制項的基本版面配置類別。

試想一下,我們希望把兩個按鈕在程式的右下角。要建立這樣一個佈局,我們可以使用一橫一縱兩個框。要創造必要的空餘空間,我們將增加一個拉伸因子(stretch factor)。


#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
PyQt5 教程

在这个例子中,我们在窗口的右下角放置两个按钮。

作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年7月31日
"""

import sys
from PyQt5.QtWidgets import (QApplication, QWidget,
  QPushButton, QVBoxLayout, QHBoxLayout)

class Example(QWidget):

 def __init__(self):
  super().__init__()

  self.initUI()

 def initUI(self):

  okButton = QPushButton('确定')
  cancelButton = QPushButton('取消')

  hbox = QHBoxLayout()
  hbox.addStretch(1)
  hbox.addWidget(okButton)
  hbox.addWidget(cancelButton)

  vbox = QVBoxLayout()
  vbox.addStretch(1)
  vbox.addLayout(hbox)

  self.setLayout(vbox)

  self.setGeometry(300, 300, 350, 150)
  self.setWindowTitle('Box布局')  
  self.show()

if __name__ == '__main__':

 app = QApplication(sys.argv)
 ex = Example()
 sys.exit(app.exec_())

該範例將兩個按鈕放在視窗的右下角。當我們調整應用程式視窗的大小時,他們是固定在右下角的。我們同時使用HBoxLayout 和QVBoxLayout佈局。

okButton = QPushButton('确定')
 cancelButton = QPushButton('取消')

這裡我們建立了兩個按鈕。

hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)

我們建立了一個水平box佈局,增加拉伸因子(addStretch),加入(addWidget)兩個按鈕。在新增兩個按鈕之前增加了一個拉伸因子,這會將兩個按鈕推到視窗右側。

vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)

要得到我們想要的佈局,還需將橫向佈局放入垂直的佈局中。在垂直框上的拉伸因子會將水平框包含裡面的控制項推至視窗的底部。

self.setLayout(vbox)

最後,我們設定視窗的主佈局。

程式執行後

PyQt5每天必學之佈局管理

QGridLayout網格佈局

最常用的佈局類別是網格佈局。這種佈局將該空間分成行和列。要建立一個網格佈局,我們使用QGridLayout 的類別。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
PyQt5 教程

在这个例子中,我们使用网格布局创建一个计算器的框架。

作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年7月31日
"""

import sys
from PyQt5.QtWidgets import (QApplication, QWidget,
QPushButton, QGridLayout)

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', '.', '=', '+',]

  positions = [(i, j) for i in range(5) for j in range(4)]

  for position, name in zip(positions, names):

   if name == '':
    continue
   button = QPushButton(name)
   grid.addWidget(button, *position)

  self.move(300, 150)
  self.setWindowTitle('计算器')  
  self.show()

if __name__ == '__main__':

 app = QApplication(sys.argv)
 ex = Example()
 sys.exit(app.exec_())

在我們的範例中,我們將建立的按鈕控制項放在網格中。

grid = QGridLayout()  
self.setLayout(grid)

實例化 QGridLayout 並設定應用程式視窗的佈局。

 names = ['Cls', 'Bck', '', 'Close', 
  '7', '8', '9', '/',
  '4', '5', '6', '*',
  '1', '2', '3', '-',
  '0', '.', '=', '+',]

這是以後要用到的按鈕標籤。

positions = [(i, j) for i in range(5) for j in range(4)]

x我們建立了網格位置的清單。

for position, name in zip(positions, names):

   if name == '':
    continue
   button = QPushButton(name)
   grid.addWidget(button, *position)

建立按鈕並新增(addWidget)到佈局中。

程式執行後

PyQt5每天必學之佈局管理

擴充網格佈局

視窗中的控制項可以跨越網格中的多個列或行。在下面的例子中,我們說明這一點。


#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
PyQt5 教程

在这个例子中,我们使用GridLayout的跨行创建了一个更复杂的窗口布局。

作者:我的世界你曾经来过
博客:http://blog.csdn.net/weiaitaowang
最后编辑:2016年7月31日
"""

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, 
QTextEdit, QLineEdit, QGridLayout)

class Example(QWidget):

 def __init__(self):
  super().__init__()

  self.initUI()

 def initUI(self):

  title = QLabel('标题')
  author = QLabel('作者')
  review = QLabel('评论')

  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)
  grid.addWidget(reviewEdit, 3, 1, 5, 1)

  self.setLayout(grid)

  self.setGeometry(300, 300, 350, 300)
  self.setWindowTitle('评论')  
  self.show()

if __name__ == '__main__':

 app = QApplication(sys.argv)
 ex = Example()
 sys.exit(app.exec_())

我們建立的程式中包含三個標籤,兩個單行文字輸入框和一個文字編輯控件,使用QGridLayout佈局。

grid =QGridLayout()
grid.setSpacing(10)

實例化網格佈局和並設定設定間距。

grid.addWidget(reviewEdit, 3, 1, 5, 1)

新增一個控制項到網格佈局中,我們可以為這個控制項使用行跨度或列跨度。在我們的例子中,我們要求reviewEdit控制項跨度5行。

程式執行後


PyQt5每天必學之佈局管理

在PyQt5教程的這一部分專門介紹了佈局管理。後面將會介紹PyQt5的事件相關內容。

相關推薦:

PyQt5每天必學之帶有標籤的複選框

PyQt5每天必學之創建視窗居中效果

PyQt5每天必學關閉視窗

#

以上是PyQt5每天必學之佈局管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
pyqt5怎么安装pyqt5怎么安装Nov 30, 2023 pm 02:05 PM

pyqt5安装步骤:1、确保计算机上已安装Python和pip;2、在终端或命令提示符中输入“pip install PyQt5”命令来安装PyQt5;3、安装完成后,可以在Python脚本中导入PyQt5模块并开始使用;4、可以通过输入“pip install PyQt5.QtGui”命令来安装一些特定功能或组件;5、遇到任何问题,可以尝试升级pip和setuptools。

Laravel扩展包管理:轻松集成第三方代码和功能Laravel扩展包管理:轻松集成第三方代码和功能Aug 25, 2023 pm 04:07 PM

Laravel扩展包管理:轻松集成第三方代码和功能引言:在Laravel开发中,我们经常使用第三方代码和功能来提高项目的效率和稳定性。而Laravel扩展包管理系统允许我们轻松地集成这些第三方代码和功能,使得我们的开发工作更加便捷和高效。本文将介绍Laravel扩展包管理的基本概念和使用方法,并通过一些实际的代码示例来帮助读者更好地理解和应用。什么是Lara

如何在麒麟操作系统上进行网络服务器的设置和管理?如何在麒麟操作系统上进行网络服务器的设置和管理?Aug 04, 2023 pm 09:25 PM

如何在麒麟操作系统上进行网络服务器的设置和管理?麒麟操作系统是中国自主开发的一种基于Linux的操作系统。它具有开源、安全、稳定等特点,在国内得到了广泛的应用。本文将介绍如何在麒麟操作系统上进行网络服务器的设置和管理,帮助读者更好地搭建和管理自己的网络服务器。一、安装相关软件在开始设置和管理网络服务器之前,我们需要先安装一些必要的软件。在麒麟操作系统上,可以

超全!Python图形界面框架PyQt5使用指南!超全!Python图形界面框架PyQt5使用指南!Apr 13, 2023 am 08:43 AM

常见GUI框架 PyQt5:Qt是一个跨平台的 C++图形用户界面库。QT一度被诺基亚拥,后出售给芬兰的软件公司Digia Oyj。PyQt5是基于Digia公司Qt5的Python接口,由一组Python模块构成。PyQt5本身拥有超过620个类和6000函数及方法。在可以运行于多个平台,包括:Unix, Windows, and Mac OS。 Pyside6:Pyside是QT公司官方提供的Python包,上一版本为Pyside2,对应的是QT5,最新版命名规则进行了调整,更改为Pysid

如何在麒麟操作系统上进行硬盘空间的管理和清理?如何在麒麟操作系统上进行硬盘空间的管理和清理?Aug 04, 2023 am 09:49 AM

如何在麒麟操作系统上进行硬盘空间的管理和清理?麒麟操作系统是一个基于Linux的操作系统,相比其他操作系统,麒麟提供了更多的自由度和可定制性。在长期的使用过程中,我们经常会遇到硬盘空间不足的问题,这时候就需要进行硬盘空间的管理和清理。本文将介绍如何在麒麟操作系统上进行硬盘空间的管理和清理,包括查看硬盘空间使用情况、删除不必要的文件以及使用磁盘清理工具。首先,

pyqt5安装报错怎么解决pyqt5安装报错怎么解决Nov 20, 2023 pm 02:34 PM

解决方法:1、检查Python版本与PyQt5的要求相匹配;2、安装pip;3、安装Qt;4、重新安装PyQt5;5、检查依赖项是否缺少,并安装缺少的依赖项;6、检查错误消息,错误消息通常会提供有关问题的详细信息,包括缺少的库或模块;7、更新pip和setuptools;8、使用虚拟环境,尝试在虚拟环境中安装PyQt5;9、检查网络连接;10、手动下载和安装PyQt5。

ThinkPHP6中如何进行审核流程管理?ThinkPHP6中如何进行审核流程管理?Jun 12, 2023 am 09:31 AM

随着互联网的发展,越来越多的企业开始使用网络进行业务处理,这就要求企业必须有一套完善的审核流程管理系统来确保业务的安全和规范。在PHP开发中,ThinkPHP6框架提供了便捷的审核流程管理功能,本文将介绍如何在ThinkPHP6中实现审核流程管理。一、ThinkPHP6审核流程管理基本思路ThinkPHP6的审核流程管理基本思路是通过数据库记录来实现,一般需

如何在Linux中进行集群管理如何在Linux中进行集群管理Jun 19, 2023 am 08:21 AM

在高可用性(HA)的系统中,集群是不可或缺的一部分。当一个单一节点不能提供足够的可用性或性能时,集群是一种实用的解决方案。Linux是非常流行的集群环境,它通过多种途径来提供集群的实现和支持。在本文中,我们将学习如何在Linux中进行集群管理。集群管理软件Linux使用许多集群管理软件来帮助管理员轻松地管理多台服务器的集群实例。有许多工具可供选择,其

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具