某の作成に必要なPyQt5に関する知識

1. ラベルの更新

ここに書いてあるとおり。

ただし、以下の点について注意する必要がある。

window.show() を実行する前にsetTextを実行してラベルの文字列を変更すると、プログラムの動作はもちろん、見かけの動作も全く問題ない。

一方、window.show()を実行したあとにラベルの文字列を変更すると、仮にsetTextで更新する文字列の長さが、最初に定めたラベルの文字列よりも長い場合には、最初に定めたラベルの文字列の長さだけしか表示してくれない、という問題点がある。

yu00.hatenablog.com

 

2. 時間差でのラベルの更新

今回の目的を達成するには、このラベルの更新は等時間間隔で行う必要がある。

ラベルの更新を任意の秒数ごとに行う場合には、以下に示される方法を利用する。

stackoverflow.com

 

QtCore.QTimer をimportして、テキストを更新するためのスロットとconnectし、シグナルはtimeoutとstartを利用して、QTimerで設定した時間経過後にスロットを発動させることができる。

 

3. gridLayoutの要素にアクセスする方法

setLayoutの時点で、すでに各要素の位置は決まっている。

Qtでいうポインタみたいな感じで、構成したレイアウトからさらにitemAtPosition(x, y)を使って、任意の要素にアクセスできる。でもそのままだとアクセスできないと思う。

 

 

itemAtPosition(x, y)でアクセスしたい要素のポインタを取得したあと、widgetを参照するようにwidgetオプションを追加してあげる。そうすると、QLabelを参照するようになる。

あとはQLabelと同じように取り扱ってあげればいい。

 

>|?|

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout, \
QGridLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class App(QDialog):
def __init__(self):
super().__init__()
self.title = 'PyQt5 layout'
self.left = 10
self.top = 10
self.width = 320
self.height = 100
self.initUI()

def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)

self.createGridLayout()

windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)
self.setLayout(windowLayout)

self.show()

def createGridLayout(self):
# タイトルとグリッドの行・列数を指定
self.horizontalGroupBox = QGroupBox("Grid")
layout = QGridLayout()
layout.setColumnStretch(1, 4)
layout.setColumnStretch(2, 4)

# ウィジェットは layout.addWidget(Widget, X, Y)で追加
layout.addWidget(QLabel('1'), 0, 0)
layout.addWidget(QLabel('2'), 0, 1)
layout.addWidget(QLabel('3'), 0, 2)
layout.addWidget(QLabel('4'), 1, 0)
layout.addWidget(QLabel('5'), 1, 1)
layout.addWidget(QLabel('6'), 1, 2)
layout.addWidget(QLabel('7'), 2, 0)
layout.addWidget(QLabel('8'), 2, 1)
layout.addWidget(QLabel('9'), 2, 2)

self.horizontalGroupBox.setLayout(layout)

find = layout.itemAtPosition(1,0)
print(find.widget().setText('t'))

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())

||<

 

4. connect で NoneTypeエラーがうっとおしい

drilldripper.hatenablog.com

connectの引数内で lambda: をしてあげるとちゃんと動いた。

情報ありがとうございます!

 

5. ウィンドウの背景色の変更

stackoverflow.com

ここにあるとおり。

まあこっちでもできなくはないけれども、あとで視覚的に、ダイアログで色変更ができるかどうかを考えると微妙。

How to Change the Background Color of QWidget/ja - Qt Wiki

 

5. 正規表現

下に対象と成る文章、上に正規表現、ハイライトでどこを参照するか逐一教えてくれるサイト。

便利。

regexr.com

あと以下のマイクロソフトのページも役に立った。

正規表現の構文