2017-12-20 6 views
0

나는이처럼 보이는 레이아웃 만들기 위해 노력하고 폭 : 기본적으로,이 세포 수 (1) 첫 번째 행은 얇은되고 싶어PyQt는 QGridLayout 다른 열은

_________ 
| |  | 
|1 | 2 | 
|__|______| 
| 3 | 4 | 
|____|____| 

을 해당 셀이 있지만 세포 수를 3, 4 두 번째 행의 너비는 동일해야합니다.

PyQt4에서 QGridLayout을 사용하여 이와 같은 레이아웃을 만들 수도 있습니까?

답변

0
QGridLayout의 작업은 당신이 기능을 사용해야합니다이를 위해, 구조의 유형을 만드는 것입니다

:

무효 QGridLayout :: 개의 addWidget (는 QWidget * 위젯, INT fromRow, INT fromColumn, INT ROWSPAN을 , int columnSpan, Qt :: Alignment alignment = 0)

이것은 오버로드 된 함수입니다.

이 버전은 셀 격자에 주어진 위젯을 여러 행/열에 걸쳐 추가합니다. 셀은 fromRow, fromrowSpan rows 및 columnSpan 열의 열에서 시작됩니다. 위젯은 주어진 정렬을 갖습니다.

rowSpan 및/또는 columnSpan이 -1 인 경우 위젯은 아래쪽 및/또는 오른쪽 가장자리로 각각 까지 확장됩니다.

예 :

import sys 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

app = QApplication(sys.argv) 
w = QWidget() 
glay = QGridLayout(w) 
glay.addWidget(QLabel("1"), 0, 0) 
glay.addWidget(QLabel("2"), 0, 1, 1, 3) 
glay.addWidget(QLabel("3"), 1, 0, 1, 2) 
glay.addWidget(QLabel("4"), 1, 2, 1, 2) 

qsrand(QTime.currentTime().msec()) 

for label in w.findChildren(QLabel): 
    color = QColor(qrand() % 256, qrand() % 256, qrand() % 256) 
    label.setStyleSheet('.QLabel{{background: rgb({}, {}, {});}}'.format(color.red(), color.green(), color.blue())) 

w.show() 
sys.exit(app.exec_()) 

enter image description here

+0

아주 좋은. (회사 보안 정책으로 인해 스냅 샷을 볼 수는 없지만) 호기심에서 : 3 개의 열이있는 그리드도 그렇게하지 않겠습니까? (의미 : 레이블 "2"는 2 열, 레이블 "4"는 1 열을 나타냅니다.) – Scheff

+1

질문의 저자가 제공 한 다이어그램에 따르면 레이블 1은 레이블 2보다 가중치가 낮아야하며 레이블 3 및 라벨 4; label3은 label 4와 같은 가중치를 가지고 있으므로, 하나의 해법은 label이 다음과 같은 가중치를 갖는다는 것입니다 : 'label1 = 1','label2 = 3','label3 = 2' 그리고'label4 = 3' – eyllanesc

+0

OK. 흠. 레이아웃을 위해 가중치와 같은 것을 사용할 가능성이 없었습니까? (나는 이것이 Qt로 바꾸기 전에 내가 사용했던'GtkTable'과 대략 차이가 있기 때문에 이것을 대략 기억합니다.) – Scheff