回答編集履歴

2

d

2019/10/16 04:42

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -123,3 +123,235 @@
123
123
 
124
124
 
125
125
  PyQt5 は Qt (C++) の Python ラッパーで使い方は Qt とほぼ同じなので、PyQt5 の情報を調べる際は、C++ の Qt の情報も参考にするとよいです。
126
+
127
+
128
+
129
+ ## 追記
130
+
131
+
132
+
133
+ Qt Designer を使う場合は、Python のコードに変換して使うのではなく、PyQt5.uic.loadUi() 関数で .ui ファイルを直接読み込むほうがよいと思います。
134
+
135
+ Qt Designer で設定した Object Name がそのまま各ウィジェットの変数名になります。
136
+
137
+
138
+
139
+ ----
140
+
141
+
142
+
143
+ ファイル構成
144
+
145
+ mainwindow.ui と main.py を同じディレクトリに配置
146
+
147
+
148
+
149
+ ### mainwindow.ui
150
+
151
+
152
+
153
+ mainwindow.ui は Qt Designer で生成したもの
154
+
155
+
156
+
157
+ ```python
158
+
159
+ <?xml version="1.0" encoding="UTF-8"?>
160
+
161
+ <ui version="4.0">
162
+
163
+ <class>MainWindow</class>
164
+
165
+ <widget class="QMainWindow" name="MainWindow">
166
+
167
+ <property name="geometry">
168
+
169
+ <rect>
170
+
171
+ <x>0</x>
172
+
173
+ <y>0</y>
174
+
175
+ <width>189</width>
176
+
177
+ <height>156</height>
178
+
179
+ </rect>
180
+
181
+ </property>
182
+
183
+ <property name="windowTitle">
184
+
185
+ <string>MainWindow</string>
186
+
187
+ </property>
188
+
189
+ <widget class="QWidget" name="centralwidget">
190
+
191
+ <layout class="QVBoxLayout" name="verticalLayout">
192
+
193
+ <item>
194
+
195
+ <widget class="QLineEdit" name="lineEdit1">
196
+
197
+ <property name="text">
198
+
199
+ <string>LineEdit1</string>
200
+
201
+ </property>
202
+
203
+ </widget>
204
+
205
+ </item>
206
+
207
+ <item>
208
+
209
+ <widget class="QLineEdit" name="lineEdit2">
210
+
211
+ <property name="text">
212
+
213
+ <string>LineEdit2</string>
214
+
215
+ </property>
216
+
217
+ </widget>
218
+
219
+ </item>
220
+
221
+ <item>
222
+
223
+ <widget class="QLineEdit" name="lineEdit3">
224
+
225
+ <property name="text">
226
+
227
+ <string>LineEdit3</string>
228
+
229
+ </property>
230
+
231
+ </widget>
232
+
233
+ </item>
234
+
235
+ <item>
236
+
237
+ <widget class="QLabel" name="label">
238
+
239
+ <property name="text">
240
+
241
+ <string/>
242
+
243
+ </property>
244
+
245
+ </widget>
246
+
247
+ </item>
248
+
249
+ </layout>
250
+
251
+ </widget>
252
+
253
+ <widget class="QMenuBar" name="menubar">
254
+
255
+ <property name="geometry">
256
+
257
+ <rect>
258
+
259
+ <x>0</x>
260
+
261
+ <y>0</y>
262
+
263
+ <width>189</width>
264
+
265
+ <height>20</height>
266
+
267
+ </rect>
268
+
269
+ </property>
270
+
271
+ </widget>
272
+
273
+ <widget class="QStatusBar" name="statusbar"/>
274
+
275
+ </widget>
276
+
277
+ <resources/>
278
+
279
+ <connections/>
280
+
281
+ </ui>
282
+
283
+
284
+
285
+ ```
286
+
287
+
288
+
289
+ ### main.py
290
+
291
+
292
+
293
+ ```python
294
+
295
+ import sys
296
+
297
+
298
+
299
+ from PyQt5.QtWidgets import *
300
+
301
+ from PyQt5.QtCore import *
302
+
303
+ from PyQt5 import uic
304
+
305
+
306
+
307
+ class MainWindow(QMainWindow):
308
+
309
+ def __init__(self):
310
+
311
+ super().__init__()
312
+
313
+ uic.loadUi('mainwindow.ui', self)
314
+
315
+
316
+
317
+ # イベントをフィルタ (監視) するウィジェットを設定する。
318
+
319
+ self.lineEdit1.installEventFilter(self)
320
+
321
+ self.lineEdit2.installEventFilter(self)
322
+
323
+ self.lineEdit3.installEventFilter(self)
324
+
325
+
326
+
327
+ self.show()
328
+
329
+
330
+
331
+ def eventFilter(self, obj, event):
332
+
333
+ if event.type() == QEvent.FocusIn:
334
+
335
+ # フォーカスが移るイベントが発生した場合、
336
+
337
+ # イベントが発生したオブジェクトの名前をラベルに設定する。
338
+
339
+ self.label.setText(obj.objectName())
340
+
341
+
342
+
343
+ return super().eventFilter(obj, event)
344
+
345
+
346
+
347
+ if __name__ == '__main__':
348
+
349
+ app = QApplication(sys.argv)
350
+
351
+ win = MainWindow()
352
+
353
+ win.show()
354
+
355
+ sys.exit(app.exec_())
356
+
357
+ ```

1

d

2019/10/16 04:41

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -74,6 +74,8 @@
74
74
 
75
75
 
76
76
 
77
+ # イベントをフィルタ (監視) するウィジェットを設定する。
78
+
77
79
  self.lineEdit1.installEventFilter(self)
78
80
 
79
81
  self.lineEdit2.installEventFilter(self)
@@ -85,6 +87,10 @@
85
87
  def eventFilter(self, obj, event):
86
88
 
87
89
  if event.type() == QEvent.FocusIn:
90
+
91
+ # フォーカスが移るイベントが発生した場合、
92
+
93
+ # イベントが発生したオブジェクトの名前をラベルに設定する。
88
94
 
89
95
  self.label.setText(obj.objectName())
90
96