質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4596閲覧

pyqt5でのテキストボックスの作り方について

uc200

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2017/10/23 14:50

python3でpyqt5を勉強中です。テキストボックスをかくコードのサンプルとして次のようなコードがありありました。

python3

1import sys 2from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, 3 QTextEdit, QGridLayout, QApplication) 4 5 6class Example(QWidget): 7 8 def __init__(self): 9 super().__init__() 10 11 self.initUI() 12 13 14 def initUI(self): 15 16 title = QLabel('Title') 17 author = QLabel('Author') 18 review = QLabel('Review') 19 20 titleEdit = QLineEdit() 21 authorEdit = QLineEdit() 22 reviewEdit = QTextEdit() 23 24 # 格子状の配置を作り、各ウィジェットのスペースを空ける 25 grid = QGridLayout() 26 grid.setSpacing(10) 27 28 # ラベルの位置設定 29 grid.addWidget(title, 1, 0) 30 # 入力欄の位置設定 31 grid.addWidget(titleEdit, 1, 1) 32 33 grid.addWidget(author, 2, 0) 34 grid.addWidget(authorEdit, 2, 1) 35 36 grid.addWidget(review, 3, 0) 37 grid.addWidget(reviewEdit, 3, 1, 5, 1) 38 39 self.setLayout(grid) 40 41 self.setGeometry(300, 300, 350, 300) 42 self.setWindowTitle('Review') 43 self.show() 44 45 46if __name__ == '__main__': 47 48 app = QApplication(sys.argv) 49 ex = Example() 50 sys.exit(app.exec_())

このコードの37行目の
grid.addWidget(reviewEdit, 3, 1, 5, 1)
の最後の5,1の二つの数字の意味するところがよく分かりません。
どなたか分かる方ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問を拝見する限り、わかっていないのはQTextEditの使い方ではありませんね。
グリッドレイアウトの仕組みを理解する必要がありそうです。


適当にサンプルを書いてみました。

Python

1import sys 2from PyQt5.QtCore import * 3from PyQt5.QtGui import * 4from PyQt5.QtWidgets import * 5 6 7class Example(QWidget): 8 def __init__(self): 9 super().__init__() 10 self.initUI() 11 12 def initUI(self): 13 grid = QGridLayout() 14 grid.setSpacing(10) 15 16 font = QFont('consolas', 20) 17 labels = [QLabel(str(i)) for i in range(4)] 18 for label in labels: 19 label.setAlignment(Qt.AlignCenter) 20 label.setFont(font) 21 label.setStyleSheet('color:white;background-color:black;') 22 23 """------------------------------HERE------------------------------""" 24 # fromRow, fromColumn, rowSpan, columnSpan 25 grid.addWidget(labels[0], 0, 0, 1, 1) 26 grid.addWidget(labels[1], 1, 0, 1, 1) 27 grid.addWidget(labels[2], 0, 1, 2, 1) 28 grid.addWidget(labels[3], 2, 0, 1, 2) 29 """----------------------------------------------------------------""" 30 31 self.setLayout(grid) 32 self.setGeometry(300, 300, 350, 300) 33 self.setWindowTitle('Sample') 34 self.show() 35 36 37if __name__ == '__main__': 38 app = QApplication(sys.argv) 39 ex = Example() 40 sys.exit(app.exec_())

実行結果
実行結果


HEREの部分で、実際のレイアウトを行っています。そこに着目してください。
Qtのリファレンスを見ると、QGridLayout::addWidgetは次のように説明されています。

*void QGridLayout::addWidget(QWidget widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
This version adds the given widget to the cell grid, spanning multiple rows/columns. The cell will start at fromRow, fromColumn spanning rowSpan rows and columnSpan columns. The widget will have the given alignment.

要するに、開始地点の座標と、オブジェクトのサイズを両方指定できるということです。
引数の名前は順に、widget fromRow fromColumn rowSpan columnSpanですね。
これらに留意して、サンプルをしっかり観察すれば挙動がわかるはずです。


Qtを学ぶ上では、英語は必須、C++の知識もそこそこ必要です。
なかなか大変な道ですが、頑張ってくださいね。

投稿2017/10/23 16:46

編集2017/10/26 11:02
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uc200

2017/10/26 12:21

分かりやすい回答&応援ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問