「PyQtの基礎 - 画面」の版間の差分

編集の要約なし
編集の要約なし
編集の要約なし
193行目: 193行目:
  if __name__ == "__main__":
  if __name__ == "__main__":
     main()
     main()
</source>
<br><br>
== レイアウト ==
PyQtのレイアウトは、QHBoxとQVBoxの2種類(縦(horizon)と横(vertical))が存在する。<br>
指定が無い場合、QHBox(縦のレイアウト)が自動的に配置される。<br>
<br>
以下のサンプルコードにおいて、13行目の<code>self.upper.stateChanged.connect(self.uppercase)</code>では、<br>
<code>connect</code>により、"Upper"チェックボックスにチェックが入っている時、<code>uppercase</code>関数にコネクトする。<br>
<code>addWiget</code>関数では、upper_aチェックボックスとupper_bチェックボックスを指定している。<br>
また、<code>addWiget</code>関数では、<code>vertical</code>を指定している。<br>
<br>
verticalにはQVBoxLayout(縦のレイアウト)を指定しているので、チェックボックスが縦に並ぶ。<br>
グループ化されていないので、複数のチェックボックスを選択することができる。<br>
<br>
else文では、チェックボックスにチェックが入っていない時は、removeWigetをすることにより、チェックを入力するたびにチェックボックスが追加される現象を防いでいる。<br>
<source lang="python">
import sys
import sip
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
    def __init__(self, parent=None):
      super(MainWindow, self).__init__(parent)
      # 上のチェックボックス
      self.upper = QCheckBox('Upper', self)
      self.upper.move(100, 30)
      self.upper.stateChanged.connect(self.uppercase)
      # 横のレイアウト
      self.horizon = QHBoxLayout()
      # 縦のレイアウト
      self.vertical = QVBoxLayout()
      self.horizon.addLayout(self.vertical)
      self.setLayout(self.horizon)
      self.setGeometry(300, 50, 400, 350)
      self.setWindowTitle('QCheckBox')
    def uppercase(self):
      if(self.upper.isChecked()):
          self.upper_a = QCheckBox('A', self)
          self.vertical.addWidget(self.upper_a)
          self.upper_b = QCheckBox('B', self)
          self.vertical.addWidget(self.upper_b)
      else:
          self.vertical.removeWidget(self.upper_a)
          self.vertical.removeWidget(self.upper_b)
if __name__ == '__main__':
    App = QApplication(sys.argv)
    Window = MainWindow()
    Window.show()
    sys.exit(App.exec_())
  </source>
  </source>
<br><br>
<br><br>