我正在尝试制作GUI,但在小部件定位方面遇到了麻烦。我想将一个小部件(A)的位置与在GridLayout中添加的另一个小部件(B)的位置联系起来。因此,主要思想是:A.pos()= B.pos()+ DELTA。
详细信息:
让我们使用带有包含四个Qlabel的QGridLayout的QWidget:
import sys
from PySide2.QtWidgets import*
from PySide2.QtGui import*
from PySide2.QtCore import*
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 300)
lab1 = QLabel("label1")
lab2 = QLabel("label2")
lab3 = QLabel("label3")
lab4 = QLabel("label4")
lay = QGridLayout()
lay.addWidget(lab1,0,0)
lay.addWidget(lab2,0,1)
lay.addWidget(lab3,1,0)
lay.addWidget(lab4,1,1)
w.setLayout(lay)
w.show()
sys.exit(app.exec_())
GUI屏幕在这里
因此,我想创建QLineEdit并将其放置在lab4上方并尝试实现以下内容:
le = QLineEdit(w)
le.setGeometry(QRect(lab4.pos().x(),lab4.pos().y()+10,20,20))
但是,如果进行print(lab4.pos()。x(),lab4.pos()。y()),它将打印(0,0)...,并且我的GUI看起来像这样
但是我希望它看起来像这样
请帮助我正确设置我的窗口小部件。如您所知,我使用PyQT编写,但是如果您使用C ++ QT回答我,我也将不胜感激!
答案 0 :(得分:0)
如果我怀疑是要在其中一个网格元素的左上角放置QLineEdit
,那么您可以利用...
QGridLayout
允许将多个项目添加到同一单元格。QLayout
进入单元格。首先,创建一个继承自QGridLayout
的类,除了向单元格(0,0)中添加QLineEdit
并向QLineEdit
的右下方添加一个class line_edit_overlay(QGridLayout):
def __init__(self):
super(line_edit_overlay, self).__init__()
self.line_edit = QLineEdit()
self.addWidget(self.line_edit, 0, 0);
self.setRowStretch(1, 1);
self.setColumnStretch(1, 1);
...
import sys
from PySide2.QtWidgets import*
from PySide2.QtGui import*
from PySide2.QtCore import*
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 300)
lab1 = QLabel("label1")
lab2 = QLabel("label2")
lab3 = QLabel("label3")
lab4 = QLabel("label4")
lay = QGridLayout()
lay.addWidget(lab1,0,0)
lay.addWidget(lab2,0,1)
lay.addWidget(lab3,1,0)
lay.addWidget(lab4,1,1)
w.setLayout(lay)
# Added the following. Note the calls to lay.setRowStretch(...)
# and lay.setColumnStretch(...) which seem to be required to
# maintain even grid sizing.
for row in range(0, lay.rowCount()):
lay.setRowStretch(row, 1)
for col in range(0, lay.columnCount()):
lay.setColumnStretch(col, 1)
lay.addLayout(line_edit_overlay(), 1, 1)
w.show()
sys.exit(app.exec_())
现在您的代码将类似于...
NSDate
以上结果如下...