Как увеличить ширину и расстояние разделителя строк QFrame.HLine с помощью других кнопок? - PullRequest
0 голосов
/ 12 июня 2018

Я получил это очень крошечное QFrame.HLine Я опирался на нить Разделитель в макете коробки :

enter image description here

Но я не могу понять, как увеличить его размер, то есть увеличить расстояние между ними.Это изображение из Photoshop того, что я пытаюсь сделать:

enter image description here

Я пытался установить свойства setLineWidth и setMidLineWidth, но ненезависимо от того, насколько велики я установил их значения, строка не становится больше.

Это пример кода:

#! /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()

1 Ответ

0 голосов
/ 13 июня 2018

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()

enter image description here

...