首页 > 解决方案 > 如何使用其他按钮增加 QFrame.HLine 行分隔符的宽度和距离?

问题描述

我得到了这个非常小的QFrame.HLine我倾向于在盒子布局中的线程分隔符上做的事情:

在此处输入图像描述

但我不知道如何增加它的大小,即扩大它们之间的间距。这是我正在尝试做的 Photoshop 图像:

在此处输入图像描述

我尝试设置属性setLineWidthsetMidLineWidth,但无论我设置它们的值有多大,线都不会变大。

这是示例代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import PyQt5

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QFrame
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QGridLayout

def main():
    app = QtWidgets.QApplication( sys.argv )
    programWindow = ProgramWindow()

    programWindow.show()
    sys.exit( app.exec_() )

class ProgramWindow(QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__( self )
        self.setup_main_window()
        self.create_input_text()
        self.set_window_layout()

    def setup_main_window(self):
        self.resize( 400, 300  )
        self.centralwidget = QWidget()
        self.setCentralWidget( self.centralwidget )

    def create_input_text(self):
        self.separatorLine = QFrame()
        self.separatorLine.setFrameShape( QFrame.HLine )
        self.separatorLine.setFrameShadow( QFrame.Raised )

        # self.separatorLine.setLineWidth( 150 )
        # self.separatorLine.setMidLineWidth( 150 )

        rect = self.separatorLine.frameRect()
        print( "frameShape: %s" % rect )
        print( "width: %s" % self.separatorLine.width() )
        print( "height: %s" % self.separatorLine.height() )

        self.redoButton = QPushButton( "Redo Operations" )
        self.calculate  = QPushButton( "Compute and Follow" )
        self.open       = QPushButton( "Open File" )
        self.save       = QPushButton( "Save File" )

        self.verticalGridLayout = QGridLayout()
        self.verticalGridLayout.addWidget( self.redoButton    , 1 , 0)
        self.verticalGridLayout.addWidget( self.calculate     , 2 , 0)
        self.verticalGridLayout.addWidget( self.separatorLine , 3 , 0)
        self.verticalGridLayout.addWidget( self.open          , 4 , 0)
        self.verticalGridLayout.addWidget( self.save          , 5 , 0)
        self.verticalGridLayout.setSpacing( 0 )
        self.verticalGridLayout.setAlignment(Qt.AlignTop)

        self.innerLayout = QHBoxLayout()
        self.innerLayout.addLayout( self.verticalGridLayout )

    def set_window_layout(self):
        main_vertical_layout = QVBoxLayout( self.centralwidget )
        main_vertical_layout.addLayout( self.innerLayout )

if __name__ == "__main__":
    main()

标签: pythonqtbuttonlayoutpyqt5

解决方案


QGridLayout.setRowMinimumHeight(row, minSize)

将行行的最小高度设置为 minSize 像素。


import sys
import PyQt5

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QFrame
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QGridLayout

def main():
    app = QtWidgets.QApplication( sys.argv )
    programWindow = ProgramWindow()

    programWindow.show()
    sys.exit( app.exec_() )

class ProgramWindow(QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__( self )
        self.setup_main_window()
        self.create_input_text()
        self.set_window_layout()

    def setup_main_window(self):
        self.resize( 400, 300  )
        self.centralwidget = QWidget()
        self.setCentralWidget( self.centralwidget )

    def create_input_text(self):
        self.separatorLine = QFrame()
        self.separatorLine.setFrameShape( QFrame.HLine )
        self.separatorLine.setFrameShadow( QFrame.Raised )

        # self.separatorLine.setLineWidth( 150 )
        #self.separatorLine.setMidLineWidth( 5 )
        # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(self.separatorLine.sizePolicy().hasHeightForWidth())
        self.separatorLine.setSizePolicy(sizePolicy)
        self.separatorLine.setStyleSheet("font: 9pt;")
        self.separatorLine.setLineWidth(0)
        self.separatorLine.setMidLineWidth(10)
        # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        

        rect = self.separatorLine.frameRect()
        print( "frameShape: %s" % rect )
        print( "width: %s" % self.separatorLine.width() )
        print( "height: %s" % self.separatorLine.height() )

        self.redoButton = QPushButton( "Redo Operations" )
        self.calculate  = QPushButton( "Compute and Follow" )
        self.open       = QPushButton( "Open File" )
        self.save       = QPushButton( "Save File" )

        self.verticalGridLayout = QGridLayout()
        self.verticalGridLayout.addWidget( self.redoButton    , 1 , 0)
        self.verticalGridLayout.addWidget( self.calculate     , 2 , 0)
        self.verticalGridLayout.addWidget( self.separatorLine , 3 , 0)
        self.verticalGridLayout.addWidget( self.open          , 4 , 0)
        self.verticalGridLayout.addWidget( self.save          , 5 , 0)
        self.verticalGridLayout.setSpacing( 0 )
        self.verticalGridLayout.setRowMinimumHeight(3, 40)               # +++
        self.verticalGridLayout.setAlignment(Qt.AlignTop)

        self.innerLayout = QHBoxLayout()
        self.innerLayout.addLayout( self.verticalGridLayout )

    def set_window_layout(self):
        main_vertical_layout = QVBoxLayout( self.centralwidget )
        main_vertical_layout.addLayout( self.innerLayout )

if __name__ == "__main__":
    main()

在此处输入图像描述


推荐阅读