QtDesigner之布局管理


一、布局應用

QtDesigner中有水平布局、垂直布局、柵格布局、容器布局、表單布局、以及絕對布局。

(一)水平布局

將多個空間在水平方向展示,並且每個控件之間的間隔是相同的。創建水平布局有兩種方式:

1、控件-水平布局

這種方式就是先將空間拖到主窗口,然后再進行水平布局。

拖動三個button控件到主窗口。

 選中所有的空間然后右鍵選擇layout中的horizontally即可。

 2、水平布局-控件

 這種方法是先將水平布局控件移動到主窗口中,然后拖動比如button按鈕,但是此時這個按鈕會占據整行,我們只需要在該按鈕的最右邊或者最左邊插入新的控件即可:

3、運行

將布局視圖轉成python代碼進行運行,將布局轉成python代碼:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'horizontal.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.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(110, 70, 239, 80))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout.addWidget(self.pushButton_2)
        self.pushButton_3 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalLayout.addWidget(self.pushButton_3)
        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.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_3.setText(_translate("MainWindow", "PushButton"))
horizontal

然后在新建py文件,進行運行:

import sys
import horizontal
from PyQt5.QtWidgets import QApplication,QMainWindow

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = QMainWindow()
    ui = horizontal.Ui_MainWindow()

    #向主窗口添加控件
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

(二)其它布局

其它布局與上面的布局幾乎一模一樣,可以按照上面的方式實現,這里這種說一下容器布局和絕對布局:

1、容器布局

其實容器布局本質使用的還是上面水平布局、垂直布局、柵格布局、表單布局。

  你可以拖動一個容器,比如Frame到主窗口上,然后再拖動控件到容器中,最后右鍵容器,此時可以將其轉成各種布局方式,當然你也可以在外面先布局后,然后拖到容器中也是可以的。

2、絕對布局

什么是絕對布局?其實絕對布局就是控件的默認布局方式,比如你拖動一個空間到主窗口中,那么它是以左側和上側為基准的,實質上是通過geometry參數進行控制的。

值得注意的是,如果控件是在容器中的話,它就是相當於容器的左側和上側的位置。

二、控件應用

1、間隔與分割線

我們知道水平布局或者垂直等布局內部控件之間默認是等間距的,那么如果想讓兩個控件之間有一定的距離應該怎么做呢?此時需要用到間隔線:

上面就是利用水平的間隔線控制水平布局中兩個控件之間的水平距離,同理,可以利用垂直間隔線控制垂直布局中兩個控件之間的間隔。

那么間隔線又是什么呢?顧名思義就是區別不同組件:

這樣在生成視圖時會有這么一條線。

 2、控件的最大最小尺寸

 當你將一個控件拖動到主窗口后,這個空間會有自己的默認屬性,其中就會有控件的最大與最小尺寸:

 我們可以改變這個值,這樣放大這個控件最大不能超過其最大值,最小值不能超過其最小值。

3、尺寸策略(sizePolicy)

在你拖動一個控件到主窗口中時,這個控件已經有自己默認的尺寸了,這個默認尺寸就是控件的期望尺寸,那么我們可以改變其期望尺寸策略:

  可以看到這個控件有四種尺寸策略,分別為Horizontal Policy、Vertical Policy、Horizontal Stretch、Vertical Stretch。其中Horizontal Policy策略中是Minimum,也就是控件默認的期望尺寸取最小值。

  其中Horizontal Policy中的Expanding與Horizontal Stretch配合使用可以達到很好的布局效果,第一個控件占這個水平布局兩份,其余兩個控件也設置Expanding的尺寸策略,但是Horizontal Stretch為1,僅占一份。

4、控件伙伴關系

控件伙伴關系的設定實際上就是設置熱鍵,比如: 

上述是一個表單布局,現在給labei控件與對應的line Edit設置伙伴的關系,也就是比如通過Alt+A熱鍵給姓名的輸入框聚焦,Alt+B熱鍵給密碼的輸入框的熱鍵聚焦:

這個地方需要注意的是在label中加入如上內容&A與&B。

 通過Edit-->buddies進行設置伙伴關系:

 這樣就完成了伙伴關系,在生成的頁面中通過ALT+A或者ALT+B進行切換輸入框。

5、修改控件Tab順序

 這地方有四個控件,現在修改其排列的位置,通過Edit-->Edit Tab Order

這樣有序號,你可以通過雙擊序號改變順序,或者右鍵主窗口空白處選擇Tab順序編輯即可:

6、信號與槽

  信號是由對象或控件發射出去的消息;槽本質上是一個函數或方法。比如說按鈕的單擊事件,當單擊按鈕時就會向外界發送消息(信號),信號需要東西來接收(槽)。信號可以理解為事件,槽可以理解為事件函數。它們之間是多對多的關系。

  那么在QtDesigner中如何來完成這個功能呢?比如單擊按鈕關閉窗口。

  在QtDesigner的頁面中,Edit--->Edit Signals/Slots后點擊按鈕拖動出現:

 松開鼠標彈出函數選擇:

 此時就完成了這個功能,在預覽下單擊按鈕可關閉窗口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM