いつもこちらのサイトにはお世話になっております。
実装したいことですが、
Python3.7 Pyqt5で作成したlineEditが3つあります。
マウスで lineEdit をクリックした際、3つのボタンがある子画面が表示され、
ボタンを押すと親画面にてクリックした lineEdit に「〇番のボタンが押された。」をテキスト表示したいのですが表示できずに躓いています。
また、エディタは spyder を使用しているのですが、pyファイルを実行すると親画面、子画面は表示できるのですが、コンソールに
invalid result from MyMainWindow.eventFilter(), a 'bool' is expected not 'NoneType'
というエラーがズラッと表示されてしまいます。
毎度恐れ入りますが、ご教授頂けると幸いです。
よろしくお願い致します。
ファイル構成
sample1017.ui と sample1017.py を同じディレクトリに配置しています。
sample1017.ui
python
1<?xml version="1.0" encoding="UTF-8"?> 2<ui version="4.0"> 3 <class>MainMenu</class> 4 <widget class="QMainWindow" name="MainMenu"> 5 <property name="geometry"> 6 <rect> 7 <x>0</x> 8 <y>0</y> 9 <width>200</width> 10 <height>150</height> 11 </rect> 12 </property> 13 <property name="windowTitle"> 14 <string>Main</string> 15 </property> 16 <widget class="QWidget" name="centralwidget"> 17 <widget class="QLineEdit" name="lineEdit2"> 18 <property name="geometry"> 19 <rect> 20 <x>50</x> 21 <y>70</y> 22 <width>100</width> 23 <height>20</height> 24 </rect> 25 </property> 26 <property name="alignment"> 27 <set>Qt::AlignCenter</set> 28 </property> 29 </widget> 30 <widget class="QLineEdit" name="lineEdit3"> 31 <property name="geometry"> 32 <rect> 33 <x>50</x> 34 <y>100</y> 35 <width>100</width> 36 <height>20</height> 37 </rect> 38 </property> 39 <property name="alignment"> 40 <set>Qt::AlignCenter</set> 41 </property> 42 </widget> 43 <widget class="QLineEdit" name="lineEdit1"> 44 <property name="geometry"> 45 <rect> 46 <x>50</x> 47 <y>40</y> 48 <width>100</width> 49 <height>20</height> 50 </rect> 51 </property> 52 <property name="alignment"> 53 <set>Qt::AlignCenter</set> 54 </property> 55 </widget> 56 <widget class="QLabel" name="label"> 57 <property name="geometry"> 58 <rect> 59 <x>70</x> 60 <y>10</y> 61 <width>50</width> 62 <height>12</height> 63 </rect> 64 </property> 65 <property name="text"> 66 <string>メイン画面</string> 67 </property> 68 </widget> 69 </widget> 70 </widget> 71 <tabstops> 72 <tabstop>lineEdit1</tabstop> 73 <tabstop>lineEdit2</tabstop> 74 <tabstop>lineEdit3</tabstop> 75 </tabstops> 76 <resources/> 77 <connections/> 78 <slots> 79 <slot>slot1()</slot> 80 </slots> 81</ui> 82
sample1017.py
python
1import sys 2from PyQt5.QtWidgets import * 3from PyQt5.QtCore import * 4from PyQt5 import QtCore, QtGui, QtWidgets, uic 5 6class MyMainWindow(QtWidgets.QMainWindow): 7 8 def __init__(self, parent=None): 9 super(MyMainWindow, self).__init__(parent) 10 uic.loadUi('sample1017.ui', self) 11 12 # イベントをフィルタ (監視) するウィジェットを設定する。 13 self.lineEdit1.installEventFilter(self) 14 self.lineEdit2.installEventFilter(self) 15 self.lineEdit3.installEventFilter(self) 16 17 self.SecondWindow = Second() 18 19 def eventFilter(self, obj, event): 20 if event.type() == QEvent.FocusIn: 21 print(obj.objectName()) 22 self.SecondWindow.show() 23 24 def on_procStart(self, param): 25#クリックされた lineEdit に子画面から受け取った値をセットしたいです。 26 self.lineEdit1.setText(param) 27 28class Second(QtWidgets.QWidget): 29 30 procStart = QtCore.pyqtSignal(str) 31 32 def __init__(self, parent=None): 33 super(Second, self).__init__(parent) 34 self.w = QtWidgets.QDialog(parent) 35 self.parent = MyMainWindow 36 37 self.title = 'Second Window' 38 self.left = 800 39 self.top = 300 40 self.width = 180 41 self.height = 300 42 self.setWindowTitle(self.title) 43 self.setGeometry(self.left, self.top, self.width, self.height) 44 self.centralwidget = QtWidgets.QWidget(self) 45 self.centralwidget.setObjectName("centralwidget") 46 self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget) 47 self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) 48 self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) 49 self.pushButton_1.setObjectName("pushButton_1") 50 self.pushButton_2.setObjectName("pushButton_2") 51 self.pushButton_3.setObjectName("pushButton_3") 52 self.pushButton_1.setGeometry(QtCore.QRect(30, 30, 111, 41)) 53 self.pushButton_2.setGeometry(QtCore.QRect(30, 80, 111, 41)) 54 self.pushButton_3.setGeometry(QtCore.QRect(30, 130, 111, 41)) 55 self.pushButton_1.setText("1") 56 self.pushButton_2.setText("2") 57 self.pushButton_3.setText("3") 58 self.pushButton_1.clicked.connect(self.on_button_clicked1) 59 self.pushButton_2.clicked.connect(self.on_button_clicked2) 60 self.pushButton_3.clicked.connect(self.on_button_clicked3) 61 62#一つの関数にできそうな気がするのですがやりかたがわかりません。 63 def on_button_clicked1(self): 64 text = "1番のボタンが押された。" 65 self.procStart.emit(text) 66 def on_button_clicked2(self): 67 text = "2番のボタンが押された。" 68 self.procStart.emit(text) 69 def on_button_clicked3(self): 70 text = "3番のボタンが押された。" 71 self.procStart.emit(text) 72 73 74if __name__ == '__main__': 75 app = QtWidgets.QApplication(sys.argv) 76 win = MyMainWindow() 77 sec = Second() 78 win.show() 79 sec.procStart.connect(win.on_procStart) 80 81 sys.exit(app.exec_())
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/17 10:45
2019/10/17 11:34
2019/10/17 13:44
2019/10/17 14:39 編集
2019/10/18 07:01