[英]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.我正在尝试使用setRowStretch在QGridLayout内垂直拉伸我的按钮行,但由于某些原因它不想工作。 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_()
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.