![](/img/trans.png)
[英]How can the spacing between widgets in a QGridLayout remain fixed on window resize?
[英]How to add spacing between all fixed widgets
我有一個基於pyqt5的 GUI 應用程序。 我只希望文本框或按鈕等所有小部件具有固定大小。 我成功地做到了! 但
我希望如果有人調整 window 的大小,小部件必須具有相同的固定大小,但它應該增加/減少它們之間的空間,而不是改變小部件的大小。 (我不希望我的小部件被調整大小,這就是為什么我選擇這種方法來增加/減少它們之間的空間)。
例如: (原申請狀態)
(嘗試將 window 垂直調整為更大的尺寸,但您可以看到按鈕小部件的尺寸沒有改變。只是添加了更多空間......)
(嘗試水平調整大小)
我發現QSizePolicy
做了我想要的同樣的事情,但在任何地方都沒有得到任何好的例子。
這是我的代碼:
from PySide2 import QtWidgets
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtGui import QPainter, QBrush, QPen, QColor, QPolygon
from PySide2.QtCore import Qt, QRect, QPoint, QRectF
import sys
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow,self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 300, 300)
self.setWindowTitle("test app")
self.label = QtWidgets.QLineEdit(self)
self.label.setText("my first label!")
self.label.move(110,10)
self.label.resize(180,25)
self.b1 = QtWidgets.QPushButton(self)
self.b1.setText("Fixed Button size!")
self.b1.move(180,250)
self.b1.resize(110, 25)
self.b1.setStyleSheet("""
background-color: #4CAF50;
border: none;
color: white;
text-align: center;
font-size: 12px;
font-family: Arial
""")
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
col = QColor(0, 0, 0)
col.setNamedColor('#d4d4d4')
qp.setPen(col)
qp.setBrush(QColor(200, 50, 8))
qp.drawRect(0, 0, 100, 299)
qp.setBrush(QColor(250, 255, 250))
qp.drawRect(110, 50, 180, 180)
def window():
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
window()
它在調整大小時隱藏小部件。 我想讓按鈕和文本小部件在調整大小時在它們之間添加空格。 現在它隱藏了這些小部件,因為我沒有使用hstack
或vstack
。 我知道。
只是不知道如何將QSizePolicy
用於間距目的。
提前致謝...
對於您想要獲得的有多種解決方案,我的解決方案使用布局的屬性:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 200, 300, 300)
self.setWindowTitle("test app")
label = QtWidgets.QLabel(self)
label.setFixedWidth(100)
label.setStyleSheet("background-color: rgb(200, 50, 8)")
lineedit = QtWidgets.QLineEdit()
lineedit.setFixedWidth(180)
button = QtWidgets.QPushButton("Fixed Button size!")
button.setFixedSize(110, 25)
button.setStyleSheet(
"""
background-color: #4CAF50;
border: none;
color: white;
text-align: center;
font-size: 12px;
font-family: Arial
"""
)
widget = QtWidgets.QLabel()
widget.setFixedSize(180, 180)
widget.setStyleSheet("background-color: rgb(250, 255, 250)")
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
right_container = QtWidgets.QWidget()
botton_widget = QtWidgets.QWidget()
botton_widget.setContentsMargins(0, 0, 0, 0)
botton_widget.setFixedWidth(180)
hlay2 = QtWidgets.QHBoxLayout(botton_widget)
hlay2.setContentsMargins(0, 0, 0, 0)
hlay2.addStretch()
hlay2.addWidget(button)
glay = QtWidgets.QGridLayout(right_container)
glay.addWidget(QtWidgets.QWidget(), 0, 0, 5, 1)
glay.addWidget(lineedit, 0, 1)
glay.addWidget(QtWidgets.QWidget(), 1, 1)
glay.addWidget(widget, 2, 1, alignment=QtCore.Qt.AlignCenter)
glay.addWidget(QtWidgets.QWidget(), 3, 1)
glay.addWidget(QtWidgets.QWidget(), 0, 2, 5, 1)
glay.addWidget(botton_widget, 4, 1)
hlay = QtWidgets.QHBoxLayout(central_widget)
hlay.setContentsMargins(0, 0, 0, 0)
hlay.addWidget(label)
hlay.addWidget(right_container)
def main():
app = QtWidgets.QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.