繁体   English   中英

如何在 PyQt5 中正确使用 setRowStretch

[英]How to properly use setRowStretch in PyQt5

我正在尝试使用setRowStretchQGridLayout内垂直拉伸我的按钮行,但由于某些原因它不想工作。 然而,有趣的是, setColumnStretch对我有用。 我正在学习使用 PyQt5,所以可能有些东西我还不知道。 请参阅附件以获取我的应用程序的屏幕截图。 请帮忙。

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

在此处输入图像描述

QPushButtons 大小策略默认设置为占用尽可能多的水平空间。 如果您希望在垂直方向上也是如此,那么您将需要调整按钮大小策略。

例如

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

看到你有这么多按钮,虽然我建议子类化 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)

然后在主窗口中创建按钮时

btn = Button("%")

暂无
暂无

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

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