简体   繁体   English

如何在 PyQt5 中正确使用 setRowStretch

[英]How to properly use setRowStretch in PyQt5

I am trying to use setRowStretch to stretch my rows of button vertically inside a QGridLayout but for some reasons it doesn't want to work.我正在尝试使用setRowStretchQGridLayout内垂直拉伸我的按钮行,但由于某些原因它不想工作。 Interestingly, setColumnStretch is working for me, however.然而,有趣的是, setColumnStretch对我有用。 I'm learning to use PyQt5 so there may be something I still don't know about.我正在学习使用 PyQt5,所以可能有些东西我还不知道。 See attached for the screenshot of my application.请参阅附件以获取我的应用程序的屏幕截图。 Please help.请帮忙。

import PyQt5.QtWidgets as qtw
import PyQt5.QtGui as qtg
import PyQt5.QtCore as qtcore

class MainWindow(qtw.QWidget):
    def __init__(self):
        super().__init__()
            # Add a title
        self.setWindowTitle('Calculator - Anh Nguyen')
        
        
        # Create a label
        my_label = qtw.QLabel("0")
        # Set background color
        my_label.setStyleSheet("background-color: #e3e1da;\
                                border: 1px solid black")
        
        my_label.setMaximumHeight(50)
        
        # Align label text
        my_label.setAlignment(qtcore.Qt.AlignmentFlag.AlignVCenter | qtcore.Qt.AlignmentFlag.AlignRight)        
        
        my_label.setFont(qtg.QFont('Helvetica', 20))
        
        # Add grid layout for calculator buttons
        main_gridlayout = qtw.QGridLayout()
        
        main_gridlayout.addWidget(my_label, 0, 0, 1, 4)
        main_gridlayout.addWidget(qtw.QPushButton('%'), 1, 0)
        main_gridlayout.addWidget(qtw.QPushButton('CE'), 1, 1)
        main_gridlayout.addWidget(qtw.QPushButton('C'), 1, 2)
        main_gridlayout.addWidget(qtw.QPushButton('BKSP'), 1, 3)
        main_gridlayout.addWidget(qtw.QPushButton('7'), 2, 0)
        main_gridlayout.addWidget(qtw.QPushButton('8'), 2, 1)
        main_gridlayout.addWidget(qtw.QPushButton('9'), 2, 2)
        main_gridlayout.addWidget(qtw.QPushButton('/'), 2, 3)
        main_gridlayout.addWidget(qtw.QPushButton('4'), 3, 0)
        main_gridlayout.addWidget(qtw.QPushButton('5'), 3, 1)
        main_gridlayout.addWidget(qtw.QPushButton('6'), 3, 2)
        main_gridlayout.addWidget(qtw.QPushButton('-'), 3, 3)
        main_gridlayout.addWidget(qtw.QPushButton('1'), 4, 0)
        main_gridlayout.addWidget(qtw.QPushButton('2'), 4, 1)
        main_gridlayout.addWidget(qtw.QPushButton('3'), 4, 2)
        main_gridlayout.addWidget(qtw.QPushButton('+'), 4, 3)
        main_gridlayout.addWidget(qtw.QPushButton('+/-'), 5, 0)
        main_gridlayout.addWidget(qtw.QPushButton('0'), 5, 1)
        main_gridlayout.addWidget(qtw.QPushButton('.'), 5, 2)
        main_gridlayout.addWidget(qtw.QPushButton('='), 5, 3)
        
        # This is NOT working:
        main_gridlayout.setRowStretch(1,1)
        
        # This is working
        main_gridlayout.setColumnStretch(2,1)
        
        
        
        self.setLayout(main_gridlayout)
        
        self.show()
        
app = qtw.QApplication([])
mw = MainWindow()

app.exec_()

enter image description here在此处输入图像描述

QPushButtons size policy by default are set to take up as much horizontal space as possible. QPushButtons 大小策略默认设置为占用尽可能多的水平空间。 If you want the same to be true vertically then you will need to adjust the buttons size policy.如果您希望在垂直方向上也是如此,那么您将需要调整按钮大小策略。

for example例如

btn = qtw.QPushButton('%')
policy = btn.sizePolicy()
policy.setVerticalPolicy(policy.Policy.Minimum)  # minimum means grow 
                                                 # dont ask me why
btn.setSizePolicy(Policy)

Seeing as you have so many buttons though I would suggest subclassing QPushButton and set the default in __init__ rather than set the policy on each individual button.看到你有这么多按钮,虽然我建议子类化 QPushButton 并在__init__中设置默认值,而不是在每个单独的按钮上设置策略。

class Button(qtw.QPushButton):

   def __init__(self, text, parent=None):
       super().__init__(text, parent=parent)
       policy = self.sizePolicy()
       policy.setVerticalPolicy(policy.Policy.Minimum)
       self.setSizePolicy(policy)

then when creating you buttons in the main window然后在主窗口中创建按钮时

btn = Button("%")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM