🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

1回答

2791閲覧

Python、Pyqt5でQLineEditにカーソルが当たった時のイベントを取得したい

WMS

総合スコア37

Python 3.x

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

0グッド

0クリップ

投稿2019/10/14 01:55

編集2019/10/15 02:11

Python3.7 Pyqt5で作成したlineEditがあり、それぞれに1番、2番、3番の入力欄を作りました。
例えば1番のlineEditにカーソルが当たった場合、下のラベルに「1番を入力中です。」と表示させたいです。
ご教授お願いいたします。

python

1from PyQt5 import QtCore, QtGui, QtWidgets 2 3class Ui_MainWindow(object): 4 def setupUi(self, MainWindow): 5 MainWindow.setObjectName("MainWindow") 6 MainWindow.resize(256, 267) 7 self.centralwidget = QtWidgets.QWidget(MainWindow) 8 self.centralwidget.setObjectName("centralwidget") 9 self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) 10 self.lineEdit.setGeometry(QtCore.QRect(70, 60, 113, 20)) 11 self.lineEdit.setObjectName("lineEdit") 12 self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget) 13 self.lineEdit_2.setGeometry(QtCore.QRect(70, 90, 113, 20)) 14 self.lineEdit_2.setObjectName("lineEdit_2") 15 self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget) 16 self.lineEdit_3.setGeometry(QtCore.QRect(70, 120, 113, 20)) 17 self.lineEdit_3.setObjectName("lineEdit_3") 18 self.label = QtWidgets.QLabel(self.centralwidget) 19 self.label.setGeometry(QtCore.QRect(40, 60, 30, 16)) 20 self.label.setObjectName("label") 21 self.label_2 = QtWidgets.QLabel(self.centralwidget) 22 self.label_2.setGeometry(QtCore.QRect(40, 90, 30, 16)) 23 self.label_2.setObjectName("label_2") 24 self.label_3 = QtWidgets.QLabel(self.centralwidget) 25 self.label_3.setGeometry(QtCore.QRect(40, 120, 30, 16)) 26 self.label_3.setObjectName("label_3") 27 self.label_4 = QtWidgets.QLabel(self.centralwidget) 28 self.label_4.setGeometry(QtCore.QRect(50, 160, 140, 30)) 29 font = QtGui.QFont() 30 font.setPointSize(12) 31 self.label_4.setFont(font) 32 self.label_4.setObjectName("label_4") 33 MainWindow.setCentralWidget(self.centralwidget) 34 self.menubar = QtWidgets.QMenuBar(MainWindow) 35 self.menubar.setGeometry(QtCore.QRect(0, 0, 256, 21)) 36 self.menubar.setObjectName("menubar") 37 MainWindow.setMenuBar(self.menubar) 38 self.statusbar = QtWidgets.QStatusBar(MainWindow) 39 self.statusbar.setObjectName("statusbar") 40 MainWindow.setStatusBar(self.statusbar) 41 42 self.retranslateUi(MainWindow) 43 QtCore.QMetaObject.connectSlotsByName(MainWindow) 44 45 def retranslateUi(self, MainWindow): 46 _translate = QtCore.QCoreApplication.translate 47 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 48 self.label.setText(_translate("MainWindow", "1番")) 49 self.label_2.setText(_translate("MainWindow", "2番")) 50 self.label_3.setText(_translate("MainWindow", "3番")) 51 self.label_4.setText(_translate("MainWindow", "〇番を入力中です。")) 52 53 54if __name__ == "__main__": 55 import sys 56 app = QtWidgets.QApplication(sys.argv) 57 MainWindow = QtWidgets.QMainWindow() 58 ui = Ui_MainWindow() 59 ui.setupUi(MainWindow) 60 MainWindow.show() 61 sys.exit(app.exec_()) 62

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでしょうか

Python

1from PyQt5 import QtCore, QtGui, QtWidgets 2 3 4class MyQLineEdit(QtWidgets.QLineEdit): 5 focusIn = QtCore.pyqtSignal() 6 7 def focusInEvent(self, event): 8 super(MyQLineEdit, self).focusInEvent(event) 9 self.focusIn.emit() 10 11class MyMainWindow(QtWidgets.QMainWindow): 12 def setupUi(self): 13 self.setObjectName("MainWindow") 14 self.resize(256, 267) 15 self.centralwidget = QtWidgets.QWidget(self) 16 self.centralwidget.setObjectName("centralwidget") 17 self.lineEdit = MyQLineEdit(self.centralwidget) 18 self.lineEdit.setGeometry(QtCore.QRect(70, 60, 113, 20)) 19 self.lineEdit.setObjectName("lineEdit") 20 self.lineEdit_2 = MyQLineEdit(self.centralwidget) 21 self.lineEdit_2.setGeometry(QtCore.QRect(70, 90, 113, 20)) 22 self.lineEdit_2.setObjectName("lineEdit_2") 23 self.lineEdit_3 = MyQLineEdit(self.centralwidget) 24 self.lineEdit_3.setGeometry(QtCore.QRect(70, 120, 113, 20)) 25 self.lineEdit_3.setObjectName("lineEdit_3") 26 self.label = QtWidgets.QLabel(self.centralwidget) 27 self.label.setGeometry(QtCore.QRect(40, 60, 30, 16)) 28 self.label.setObjectName("label") 29 self.label_2 = QtWidgets.QLabel(self.centralwidget) 30 self.label_2.setGeometry(QtCore.QRect(40, 90, 30, 16)) 31 self.label_2.setObjectName("label_2") 32 self.label_3 = QtWidgets.QLabel(self.centralwidget) 33 self.label_3.setGeometry(QtCore.QRect(40, 120, 30, 16)) 34 self.label_3.setObjectName("label_3") 35 self.label_4 = QtWidgets.QLabel(self.centralwidget) 36 self.label_4.setGeometry(QtCore.QRect(40, 150, 170, 30)) 37 font = QtGui.QFont() 38 font.setPointSize(9) 39 self.label_4.setFont(font) 40 self.label_4.setObjectName("label_4") 41 self.setCentralWidget(self.centralwidget) 42 self.menubar = QtWidgets.QMenuBar(self) 43 self.menubar.setGeometry(QtCore.QRect(0, 0, 256, 21)) 44 self.menubar.setObjectName("menubar") 45 self.setMenuBar(self.menubar) 46 self.statusbar = QtWidgets.QStatusBar(self) 47 self.statusbar.setObjectName("statusbar") 48 self.setStatusBar(self.statusbar) 49 50 self.retranslateUi() 51 QtCore.QMetaObject.connectSlotsByName(self) 52 53 def retranslateUi(self): 54 _translate = QtCore.QCoreApplication.translate 55 self.setWindowTitle(_translate("MainWindow", "MainWindow")) 56 self.label.setText(_translate("MainWindow", "1番")) 57 self.label_2.setText(_translate("MainWindow", "2番")) 58 self.label_3.setText(_translate("MainWindow", "3番")) 59 self.label_4.setText(_translate("MainWindow", "〇番を入力中です。")) 60 61 def on_lineEdit_focusIn(self): 62 _translate = QtCore.QCoreApplication.translate 63 self.label_4.setText(_translate("MainWindow", "1番を入力中です。")) 64 65 def on_lineEdit_2_focusIn(self): 66 _translate = QtCore.QCoreApplication.translate 67 self.label_4.setText(_translate("MainWindow", "2番を入力中です。")) 68 69 def on_lineEdit_3_focusIn(self): 70 _translate = QtCore.QCoreApplication.translate 71 self.label_4.setText(_translate("MainWindow", "3番を入力中です。")) 72 73if __name__ == "__main__": 74 import sys 75 app = QtWidgets.QApplication(sys.argv) 76 MainWindow = MyMainWindow() 77 MainWindow.setupUi() 78 MainWindow.show() 79 sys.exit(app.exec_())

ポイントとなるのは
・LineEditにフォーカスが移った時に"focusIn"シグナルを発生させるクラスをQLineEditを拡張して作る。(ソースコード上はMyQLineEdit)
・LineEditは独自に定義したクラスで生成する。
・スロット実装の前提としてclass Ui_MainWindow(object)class MyMainWindow(QtWidgets.QMainWindow)に変える。ついでに影響のあるところを修正。
・スロットを実装する。(ソースコード上はon_lineEdit_focusInon_lineEdit_2_focusInon_lineEdit_3_focusIn

投稿2019/10/16 11:12

nomuken

総合スコア1627

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

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

WMS

2019/10/17 02:06

nomuken様 ご回答頂きましてありがとうございます。 頂いたソースとポイントを元に自分のソースとにらめっこしておりますが、ようやく雲行きが晴れてきました。 widgetのクラスを拡張すると色々なことができそうですね。 とても参考になりました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問