pyqt5:qgridlayout将所有小部件放在左上角
我正在使用pyqt5.qtwidgets.qgridlayout进行网格布局:
self.grid.addWidget(self.combo,0,0,1,2) self.grid.addWidget(self.label_A,1,0) self.grid.addWidget(self.input_A, 1, 1) self.grid.addWidget(self.label_freq, 2, 0) self.grid.addWidget(self.input_freq, 2, 1) self.grid.addWidget(self.label_phase, 3, 0) self.grid.addWidget(self.input_phase, 3, 1)
它无法正常工作,当我使用它进行调试时:
for i in range(self.grid.count()):
print(self.grid.itemAt(i).geometry())
返回:
PyQt5.QtCore.QRect(0, 0, 100, 42)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
qgridlayout将所有小部件都放在顶部的角落。我应该怎么办?
我的PYQT5版本是5.15.6。 感谢您的建议。 原始代码如下:
class SubWindow(PyQt5.QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('sub')
self.prop=dict[str,float]()
self.prop = {'sig_type': 'sin',
'A': 1,
'freq': 1,
'phase': 0}
combo=PyQt5.QtWidgets.QComboBox()
combo.addItems(['sin','tri','rect','imp','step','exp'])
combo.currentIndexChanged.connect(self.update)
combo.currentIndexChanged.connect(lambda :print(combo.currentIndex()))
combo.adjustSize()
self.combo=combo
ax=MplCanvas(self)
self.ax=ax
self.grid:PyQt5.QtWidgets.QGridLayout = PyQt5.QtWidgets.QGridLayout()
self.grid.addWidget(self.combo,0,0)
self.setLayout(self.grid)
self.update()
def show(self) -> None:
super(SubWindow, self).show()
self.update()
def update(self) -> None:
self.grid:PyQt5.QtWidgets.QGridLayout=PyQt5.QtWidgets.QGridLayout()
if self.combo.currentIndex()==0:
A=self.prop['A']
freq=self.prop['freq']
phase=self.prop['phase']
x=np.linspace(0,2*np.pi,100)
self.ax.axes.plot(x,np.sin(x))
self.grid.addWidget(self.combo,0,0,1,2)
self.label_A=PyQt5.QtWidgets.QLabel('A')
self.input_A=PyQt5.QtWidgets.QLineEdit()
self.input_A.editingFinished.connect(self.update)
self.input_A.editingFinished.connect(lambda s:self.prop.__setitem__('A',float(s)))
self.label_freq = PyQt5.QtWidgets.QLabel('freq')
self.input_freq = PyQt5.QtWidgets.QLineEdit('freq')
self.input_freq.editingFinished.connect(self.update)
self.input_A.textEdited.connect(lambda s: self.prop.__setitem__('freq', float(s)))
self.label_phase = PyQt5.QtWidgets.QLabel('phase')
self.input_phase = PyQt5.QtWidgets.QLineEdit('phase')
self.input_phase.editingFinished.connect(self.update)
self.input_A.editingFinished.connect(lambda s: self.prop.__setitem__('phase', float(s)))
self.grid.addWidget(self.label_A,1,0)
self.grid.addWidget(self.input_A, 1, 1)
self.grid.addWidget(self.label_freq, 2, 0)
self.grid.addWidget(self.input_freq, 2, 1)
self.grid.addWidget(self.label_phase, 3, 0)
self.grid.addWidget(self.input_phase, 3, 1)
for i in range(self.grid.count()):
print(self.grid.itemAt(i).geometry())
I was making grid layout with PyQt5.QtWidgets.QGridLayout:
self.grid.addWidget(self.combo,0,0,1,2) self.grid.addWidget(self.label_A,1,0) self.grid.addWidget(self.input_A, 1, 1) self.grid.addWidget(self.label_freq, 2, 0) self.grid.addWidget(self.input_freq, 2, 1) self.grid.addWidget(self.label_phase, 3, 0) self.grid.addWidget(self.input_phase, 3, 1)
it did not work properly and when i use this to debug:
for i in range(self.grid.count()):
print(self.grid.itemAt(i).geometry())
it returns:
PyQt5.QtCore.QRect(0, 0, 100, 42)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
PyQt5.QtCore.QRect(0, 0, 640, 480)
The QGridLayout place all my widgets in the top-left corner. What should i do?
My PyQt5 version is 5.15.6.
Thanks for any advice.
The original code are as follow:
class SubWindow(PyQt5.QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('sub')
self.prop=dict[str,float]()
self.prop = {'sig_type': 'sin',
'A': 1,
'freq': 1,
'phase': 0}
combo=PyQt5.QtWidgets.QComboBox()
combo.addItems(['sin','tri','rect','imp','step','exp'])
combo.currentIndexChanged.connect(self.update)
combo.currentIndexChanged.connect(lambda :print(combo.currentIndex()))
combo.adjustSize()
self.combo=combo
ax=MplCanvas(self)
self.ax=ax
self.grid:PyQt5.QtWidgets.QGridLayout = PyQt5.QtWidgets.QGridLayout()
self.grid.addWidget(self.combo,0,0)
self.setLayout(self.grid)
self.update()
def show(self) -> None:
super(SubWindow, self).show()
self.update()
def update(self) -> None:
self.grid:PyQt5.QtWidgets.QGridLayout=PyQt5.QtWidgets.QGridLayout()
if self.combo.currentIndex()==0:
A=self.prop['A']
freq=self.prop['freq']
phase=self.prop['phase']
x=np.linspace(0,2*np.pi,100)
self.ax.axes.plot(x,np.sin(x))
self.grid.addWidget(self.combo,0,0,1,2)
self.label_A=PyQt5.QtWidgets.QLabel('A')
self.input_A=PyQt5.QtWidgets.QLineEdit()
self.input_A.editingFinished.connect(self.update)
self.input_A.editingFinished.connect(lambda s:self.prop.__setitem__('A',float(s)))
self.label_freq = PyQt5.QtWidgets.QLabel('freq')
self.input_freq = PyQt5.QtWidgets.QLineEdit('freq')
self.input_freq.editingFinished.connect(self.update)
self.input_A.textEdited.connect(lambda s: self.prop.__setitem__('freq', float(s)))
self.label_phase = PyQt5.QtWidgets.QLabel('phase')
self.input_phase = PyQt5.QtWidgets.QLineEdit('phase')
self.input_phase.editingFinished.connect(self.update)
self.input_A.editingFinished.connect(lambda s: self.prop.__setitem__('phase', float(s)))
self.grid.addWidget(self.label_A,1,0)
self.grid.addWidget(self.input_A, 1, 1)
self.grid.addWidget(self.label_freq, 2, 0)
self.grid.addWidget(self.input_freq, 2, 1)
self.grid.addWidget(self.label_phase, 3, 0)
self.grid.addWidget(self.input_phase, 3, 1)
for i in range(self.grid.count()):
print(self.grid.itemAt(i).geometry())
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论