PyQt 5 매일 배 워 야 할 레이아웃 관리

GUI 프로 그래 밍 에서 무시 할 수 없 는 부분 이 있 는데 그것 이 바로 레이아웃 관리 입 니 다.레이아웃 관 리 는 프로그램 창 에 컨트롤 을 어떻게 배치 하 는 지 제어 합 니 다.레이아웃 관 리 는 두 가지 방식 으로 완성 할 수 있다.프로그램 창의 컨트롤 위 치 를 절대 위치 나 레이아웃 두 가지 방법 으로 제어 할 수 있 습 니 다.
절대 위치
모든 컨트롤 은 프로그래머 가 지정 한 위치 에 따라 배치 합 니 다.절대적 인 포 지 셔 닝 을 사용 할 때 저 희 는 다음 과 같은 제한 을 알 아야 합 니 다.
창 크기 조절 컨트롤 의 크기 와 위치 가 변 하지 않 습 니 다4.567917.서로 다른 플랫폼 에서 응용 프로그램 이 다 를 수 있 습 니 다.4.567918.
  • 글꼴 을 바 꾸 면 프로그램의 레이아웃 을 파괴 할 수 있 습 니 다
  • 4.567917.만약 에 구 조 를 바 꾸 기로 결정 하면 우 리 는 모든 컨트롤 을 철저하게 수정 해 야 한다.이것 은 번 거 롭 고 시간 이 걸 리 는 것 이다.
    아래 의 예 는 컨트롤 의 절대 좌표 포 지 셔 닝 방식 이다.
    
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    """
    PyQt5   
    
                          。
    
      :         
      :http://blog.csdn.net/weiaitaowang
        :2016 7 31 
    """
    
    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QLabel
    
    class Example(QWidget):
    
     def __init__(self):
     super().__init__()
    
     self.initUI()
    
     def initUI(self):
    
     lbl1 = QLabel('         ', self)
     lbl1.move(15, 10)
    
     lbl2 = QLabel('CSND  ', self)
     lbl2.move(35, 40)
    
     lbl3 = QLabel('   ', self)
     lbl3.move(55, 70)
    
     self.setGeometry(300, 300, 250, 150)
     self.setWindowTitle('    ') 
     self.show()
    
    if __name__ == '__main__':
    
     app = QApplication(sys.argv)
     ex = Example()
     sys.exit(app.exec_())
    
    
    우리 의 예 에서 사용 하 는 것 은 모두 라벨(Label)입 니 다.우 리 는 x 와 y 좌표 값 을 제공 하여 그것들 을 포 지 셔 닝 합 니 다.좌표계 의 원점 은 컨트롤 의 왼쪽 상단 이다.x 치가 증가 하 는 것 은 왼쪽 에서 오른쪽으로 이다.y 값 의 증 가 는 위 에서 아래로 이다.
    
    lbl1 = QLabel('         ', self)
    lbl1.move(15, 10)
    탭 컨트롤 이 x=15 와 y=10 에 놓 여 있 습 니 다.
    프로그램 실행 후

    상자 레이아웃 상자 레이아웃
    레이아웃 관 리 는 레이아웃 류 를 사용 하 는 방식 이 더욱 유연 하고 실 용적 입 니 다.창 에 컨트롤 을 두 는 가장 좋 은 방법 입 니 다.QHBoxLayout 와 QVBoxLayout 는 각각 수평 과 수직 정렬 컨트롤 의 기본 레이아웃 클래스 입 니 다.
    생각해 보 세 요.우 리 는 두 개의 단 추 를 프로그램의 오른쪽 아래 에 있 기 를 바 랍 니 다.이 레이아웃 을 만 들 려 면 가로 와 세로 두 상 자 를 사용 할 수 있 습 니 다.필요 한 공간 을 만 들 려 면 스 트 레 칭 인자(stretch factor)를 추가 합 니 다.
    
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    """
    PyQt5   
    
          ,               。
    
      :         
      :http://blog.csdn.net/weiaitaowang
        :2016 7 31 
    """
    
    import sys
    from PyQt5.QtWidgets import (QApplication, QWidget,
     QPushButton, QVBoxLayout, QHBoxLayout)
    
    class Example(QWidget):
    
     def __init__(self):
     super().__init__()
    
     self.initUI()
    
     def initUI(self):
    
     okButton = QPushButton('  ')
     cancelButton = QPushButton('  ')
    
     hbox = QHBoxLayout()
     hbox.addStretch(1)
     hbox.addWidget(okButton)
     hbox.addWidget(cancelButton)
    
     vbox = QVBoxLayout()
     vbox.addStretch(1)
     vbox.addLayout(hbox)
    
     self.setLayout(vbox)
    
     self.setGeometry(300, 300, 350, 150)
     self.setWindowTitle('Box  ') 
     self.show()
    
    if __name__ == '__main__':
    
     app = QApplication(sys.argv)
     ex = Example()
     sys.exit(app.exec_())
    
    
    이 예제 에 서 는 두 단 추 를 창의 오른쪽 아래 에 놓 습 니 다.우리 가 프로그램 창 을 조정 할 때,그들 은 오른쪽 아래 에 고정 되 어 있다.우 리 는 HBOxLayout 와 QVBoxLayout 레이아웃 을 동시에 사용 합 니 다.
    
    okButton = QPushButton('  ')
     cancelButton = QPushButton('  ')
    
    여기 서 우 리 는 두 개의 단 추 를 만 들 었 다.
    
    hbox = QHBoxLayout()
    hbox.addStretch(1)
    hbox.addWidget(okButton)
    hbox.addWidget(cancelButton)
    수평 box 레이아웃 을 만 들 었 습 니 다.스 트 레 칭 인자(addStretch)를 추가 하고(addWidget)두 단 추 를 추가 합 니 다.두 단 추 를 추가 하기 전에 스 트 레 칭 인 자 를 추가 하면 두 단 추 를 창 오른쪽 으로 밀어 줍 니 다.
    
    vbox = QVBoxLayout()
    vbox.addStretch(1)
    vbox.addLayout(hbox)
    
    우리 가 원 하 는 레이아웃 을 얻 으 려 면 수직 레이아웃 에 가로 레이아웃 을 넣 어야 합 니 다.수직 상자 의 스 트 레 칭 인 자 는 수평 상자 에 포 함 된 컨트롤 을 창 아래쪽 으로 밀어 줍 니 다.
    
    self.setLayout(vbox)
    마지막 으로 창의 주 레이아웃 을 설정 합 니 다.
    프로그램 실행 후
    这里写图片描述
    QGridLayout 격자 레이아웃
    가장 자주 사용 하 는 레이아웃 클래스 는 격자 레이아웃 입 니 다.이 레이아웃 은 이 공간 을 줄 과 열 로 나 누 었 다.격자 레이아웃 을 만 들 려 면 QGridLayout 클래스 를 사용 합 니 다.
    
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    """
    PyQt5   
    
          ,                  。
    
      :         
      :http://blog.csdn.net/weiaitaowang
        :2016 7 31 
    """
    
    import sys
    from PyQt5.QtWidgets import (QApplication, QWidget,
    QPushButton, QGridLayout)
    
    class Example(QWidget):
    
     def __init__(self):
     super().__init__()
    
     self.initUI()
    
     def initUI(self):
    
     grid = QGridLayout() 
     self.setLayout(grid)
    
     names = ['Cls', 'Bck', '', 'Close', 
     '7', '8', '9', '/',
     '4', '5', '6', '*',
     '1', '2', '3', '-',
     '0', '.', '=', '+',]
    
     positions = [(i, j) for i in range(5) for j in range(4)]
    
     for position, name in zip(positions, names):
    
      if name == '':
      continue
      button = QPushButton(name)
      grid.addWidget(button, *position)
    
     self.move(300, 150)
     self.setWindowTitle('   ') 
     self.show()
    
    if __name__ == '__main__':
    
     app = QApplication(sys.argv)
     ex = Example()
     sys.exit(app.exec_())
    
    
    우리 의 예 에서,우 리 는 만 든 단추 컨트롤 을 격자 에 놓 을 것 입 니 다.
    
    grid = QGridLayout() 
    self.setLayout(grid)
    
    QGridLayout 를 실례 화하 고 프로그램 창의 레이아웃 을 설정 합 니 다.
    
     names = ['Cls', 'Bck', '', 'Close', 
     '7', '8', '9', '/',
     '4', '5', '6', '*',
     '1', '2', '3', '-',
     '0', '.', '=', '+',]
    
    이것 은 앞으로 사용 할 단추 라벨 입 니 다.
    
    positions = [(i, j) for i in range(5) for j in range(4)]
    
    x.우 리 는 격자 위치 목록 을 만 들 었 습 니 다.
    
    for position, name in zip(positions, names):
    
      if name == '':
      continue
      button = QPushButton(name)
      grid.addWidget(button, *position)
    
    단 추 를 만 들 고 레이아웃 에 추가 합 니 다.
    프로그램 실행 후
    这里写图片描述
    확장 격자 레이아웃
    창의 컨트롤 은 격자 에 있 는 여러 열 이나 줄 을 뛰 어 넘 을 수 있 습 니 다.아래 의 예 에서 우 리 는 이 점 을 설명 한다.
    
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    """
    PyQt5   
    
          ,    GridLayout                。
    
      :         
      :http://blog.csdn.net/weiaitaowang
        :2016 7 31 
    """
    
    import sys
    from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, 
    QTextEdit, QLineEdit, QGridLayout)
    
    class Example(QWidget):
    
     def __init__(self):
     super().__init__()
    
     self.initUI()
    
     def initUI(self):
    
     title = QLabel('  ')
     author = QLabel('  ')
     review = QLabel('  ')
    
     titleEdit = QLineEdit()
     authorEdit = QLineEdit()
     reviewEdit = QTextEdit()
    
     grid =QGridLayout()
     grid.setSpacing(10)
    
     grid.addWidget(title, 1, 0)
     grid.addWidget(titleEdit, 1, 1)
    
     grid.addWidget(author, 2, 0)
     grid.addWidget(authorEdit, 2, 1)
    
     grid.addWidget(review, 3, 0)
     grid.addWidget(reviewEdit, 3, 1, 5, 1)
    
     self.setLayout(grid)
    
     self.setGeometry(300, 300, 350, 300)
     self.setWindowTitle('  ') 
     self.show()
    
    if __name__ == '__main__':
    
     app = QApplication(sys.argv)
     ex = Example()
     sys.exit(app.exec_())
    
    우리 가 만 든 프로그램 에는 세 개의 탭,두 개의 단일 텍스트 입력 상자 와 하나의 텍스트 편집 컨트롤 이 포함 되 어 있 으 며,QGridLayout 레이아웃 을 사용 합 니 다.
    
    grid =QGridLayout()
    grid.setSpacing(10)
    
    격자 레이아웃 을 예화 하고 설정 간격 을 설정 합 니 다.
    
    grid.addWidget(reviewEdit, 3, 1, 5, 1)
    
    격자 레이아웃 에 컨트롤 을 추가 하면 이 컨트롤 에 줄 간격 이나 열 간격 을 사용 할 수 있 습 니 다.우리 의 예 에서,우 리 는 reviewEdit 컨트롤 의 범위 5 줄 을 요구 합 니 다.
    프로그램 실행 후

    PyQt 5 튜 토리 얼 의 이 부분 에서 레이아웃 관 리 를 전문 적 으로 소개 했다.다음은 PyQt 5 사건 관련 내용 을 소개 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기