[英]How to properly use setRowStretch in PyQt5
我正在尝试使用setRowStretch在QGridLayout内垂直拉伸我的按钮行,但由于某些原因它不想工作。 然而,有趣的是, 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.