我有一个基于pyqt5的GUI应用程序。我只希望所有的小部件(例如Textbox或Buttons)具有固定的大小。我成功做到了! 但是
我希望如果有人调整窗口大小,则小部件必须具有相同的固定大小BUT,它应该增加/减少它们之间的间距,而不是更改小部件的大小。 (我不希望调整窗口小部件的大小,这就是为什么我选择此方法来增加/减少彼此之间的空间的原因)。
例如:(原始申请状态)(尝试将窗口垂直调整为更大的尺寸,但是您可以看到按钮小部件的大小没有改变。添加了更多空间...)(尝试水平调整大小)
[我发现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()