У меня все мои виджеты размещены в центре (кроме того, что слева, потому что я хочу, чтобы он был только там), как в сетке, так и в горизонтальном расположении. Позволь мне показать тебе :
Я хочу, чтобы они располагались так, как на изображении ниже, а не все виджеты в центре, как на изображении выше:
Как видите, верхние находятся по углам, а один прямоугольник посередине находится в центре. Я хочу, чтобы они были размещены там, где я хочу, будь то между ними или в углу, но в то же время, не теряя моих сеток и добавленных интервалов, поскольку, когда вы растягиваете это по горизонтали / вертикали, это добавит больше / меньше места между виджеты. Как вы можете убедиться сами, растянув приложение.
Вот мой код:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtGui import QCursor
from PySide2.QtWidgets import QFrame
from PySide2.QtCore import QRect
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(250, 80, 800, 600)
self.setWindowTitle("test app")
self.setStyleSheet("background-color: #ffffff; border")
label = QtWidgets.QLabel(self)
label.setFixedWidth(260)
label.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.994, y1:0.527, x2:0.999682, y2:0.005, stop:0 rgba(246, 246, 246, 255), stop:1 rgba(255, 248, 248, 255));")
lineedit = QtWidgets.QLineEdit()
lineedit.setFixedWidth(310)
lineedit.setFixedHeight(30)
lineedit.setStyleSheet("""
background-color: #ffffff;
border-width: 1px;
border-color: rgb(200, 200, 200);
border-style: solid;
border-radius: 4;
padding: 6px 12px;
color: rgb(50,50,50);
font-family: SourceSansPro-Regular;
font-size: 12px;
""")
f = lineedit.font()
f.setLetterSpacing(QtGui.QFont.PercentageSpacing, 100)
lineedit.setFont(f)
button = QtWidgets.QPushButton("New Product")
button.setFixedSize(110, 28)
button.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
button.setStyleSheet("""
QPushButton {
background-color: #474767;
border: none;
color: white;
text-align: center;
font-size: 14px;
padding: 7px 10px;
border-radius: 3;
font-family: Source Sans Pro SemiBold;
}
QPushButton:hover{
background-color: #474757;
}
""")
button1 = QtWidgets.QPushButton("Delete Product")
button1.setFixedSize(110, 28)
button1.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
button1.setStyleSheet("""
QPushButton {
background-color: #474767;
border: none;
color: white;
text-align: center;
font-size: 14px;
padding: 7px 10px;
border-radius: 3;
font-family: Source Sans Pro SemiBold;
}
QPushButton:hover{
background-color: #474757;
}
""")
button2 = QtWidgets.QPushButton("Next product")
button2.setFixedSize(110, 28)
button2.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
button2.setStyleSheet("""
QPushButton {
background-color: #474767;
border: none;
color: white;
text-align: center;
font-size: 14px;
padding: 7px 10px;
border-radius: 3;
font-family: Source Sans Pro SemiBold;
}
QPushButton:hover{
background-color: #474757;
}
""")
widget = QtWidgets.QLabel()
widget.setFixedSize(180, 180)
widget.setStyleSheet("""background-color: rgb(200, 255, 250)""")
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
right_container = QtWidgets.QWidget()
glay = QtWidgets.QGridLayout(right_container)
glay.addWidget(lineedit, 0, 0)
glay.addWidget(widget, 1, 0)
glay.addWidget(button, 2, 0)
glay.addWidget(button1, 2, 1)
glay.addWidget(button2, 0, 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()
Я пробовал много вещей, но в итоге с ошибками. У меня просто закончилась логика, о том, как этого добиться.
Заранее спасибо...
Редактировать 1: я попробовал обе эти вещи, которые были предложены в комментариях:
1) Добавление glay.addWidget(lineedit, 0, 0, alignment = QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft)
. Он дает тот же результат даже после применения изменений.
2) Использование QVBoxLayout бесполезно. Что-то не позволяет мне добавлять виджеты в прямоугольник, который я рисую ниже. Потому что я не могу добавлять виджеты со стороны прямоугольника. (Смотрите картинку ниже...)
glay.addWidget(lineedit, 0, 0, alignment=QtCore.Qt.AlignTop|QtCore.Qt.AlignLeft)
). Или вы можете использовать вложенные макеты (используйте VBox вместо Grid дляglay
, добавьте QHBoxLayout для верхних виджетов и используйтеaddStretch()
перед добавлением виджета справа). И так далее... - person musicamante   schedule 26.04.2020