質問するログイン新規登録

回答編集履歴

2

d

2019/10/16 04:42

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -60,4 +60,120 @@
60
60
 
61
61
  ----
62
62
 
63
- PyQt5 は Qt (C++) の Python ラッパーで使い方は Qt とほぼ同じなので、PyQt5 の情報を調べる際は、C++ の Qt の情報も参考にするとよいです。
63
+ PyQt5 は Qt (C++) の Python ラッパーで使い方は Qt とほぼ同じなので、PyQt5 の情報を調べる際は、C++ の Qt の情報も参考にするとよいです。
64
+
65
+ ## 追記
66
+
67
+ Qt Designer を使う場合は、Python のコードに変換して使うのではなく、PyQt5.uic.loadUi() 関数で .ui ファイルを直接読み込むほうがよいと思います。
68
+ Qt Designer で設定した Object Name がそのまま各ウィジェットの変数名になります。
69
+
70
+ ----
71
+
72
+ ファイル構成
73
+ mainwindow.ui と main.py を同じディレクトリに配置
74
+
75
+ ### mainwindow.ui
76
+
77
+ mainwindow.ui は Qt Designer で生成したもの
78
+
79
+ ```python
80
+ <?xml version="1.0" encoding="UTF-8"?>
81
+ <ui version="4.0">
82
+ <class>MainWindow</class>
83
+ <widget class="QMainWindow" name="MainWindow">
84
+ <property name="geometry">
85
+ <rect>
86
+ <x>0</x>
87
+ <y>0</y>
88
+ <width>189</width>
89
+ <height>156</height>
90
+ </rect>
91
+ </property>
92
+ <property name="windowTitle">
93
+ <string>MainWindow</string>
94
+ </property>
95
+ <widget class="QWidget" name="centralwidget">
96
+ <layout class="QVBoxLayout" name="verticalLayout">
97
+ <item>
98
+ <widget class="QLineEdit" name="lineEdit1">
99
+ <property name="text">
100
+ <string>LineEdit1</string>
101
+ </property>
102
+ </widget>
103
+ </item>
104
+ <item>
105
+ <widget class="QLineEdit" name="lineEdit2">
106
+ <property name="text">
107
+ <string>LineEdit2</string>
108
+ </property>
109
+ </widget>
110
+ </item>
111
+ <item>
112
+ <widget class="QLineEdit" name="lineEdit3">
113
+ <property name="text">
114
+ <string>LineEdit3</string>
115
+ </property>
116
+ </widget>
117
+ </item>
118
+ <item>
119
+ <widget class="QLabel" name="label">
120
+ <property name="text">
121
+ <string/>
122
+ </property>
123
+ </widget>
124
+ </item>
125
+ </layout>
126
+ </widget>
127
+ <widget class="QMenuBar" name="menubar">
128
+ <property name="geometry">
129
+ <rect>
130
+ <x>0</x>
131
+ <y>0</y>
132
+ <width>189</width>
133
+ <height>20</height>
134
+ </rect>
135
+ </property>
136
+ </widget>
137
+ <widget class="QStatusBar" name="statusbar"/>
138
+ </widget>
139
+ <resources/>
140
+ <connections/>
141
+ </ui>
142
+
143
+ ```
144
+
145
+ ### main.py
146
+
147
+ ```python
148
+ import sys
149
+
150
+ from PyQt5.QtWidgets import *
151
+ from PyQt5.QtCore import *
152
+ from PyQt5 import uic
153
+
154
+ class MainWindow(QMainWindow):
155
+ def __init__(self):
156
+ super().__init__()
157
+ uic.loadUi('mainwindow.ui', self)
158
+
159
+ # イベントをフィルタ (監視) するウィジェットを設定する。
160
+ self.lineEdit1.installEventFilter(self)
161
+ self.lineEdit2.installEventFilter(self)
162
+ self.lineEdit3.installEventFilter(self)
163
+
164
+ self.show()
165
+
166
+ def eventFilter(self, obj, event):
167
+ if event.type() == QEvent.FocusIn:
168
+ # フォーカスが移るイベントが発生した場合、
169
+ # イベントが発生したオブジェクトの名前をラベルに設定する。
170
+ self.label.setText(obj.objectName())
171
+
172
+ return super().eventFilter(obj, event)
173
+
174
+ if __name__ == '__main__':
175
+ app = QApplication(sys.argv)
176
+ win = MainWindow()
177
+ win.show()
178
+ sys.exit(app.exec_())
179
+ ```

1

d

2019/10/16 04:41

投稿

tiitoi
tiitoi

スコア21962

answer CHANGED
@@ -36,12 +36,15 @@
36
36
  central_widget.setLayout(vbox)
37
37
  self.setCentralWidget(central_widget)
38
38
 
39
+ # イベントをフィルタ (監視) するウィジェットを設定する。
39
40
  self.lineEdit1.installEventFilter(self)
40
41
  self.lineEdit2.installEventFilter(self)
41
42
  self.lineEdit3.installEventFilter(self)
42
43
 
43
44
  def eventFilter(self, obj, event):
44
45
  if event.type() == QEvent.FocusIn:
46
+ # フォーカスが移るイベントが発生した場合、
47
+ # イベントが発生したオブジェクトの名前をラベルに設定する。
45
48
  self.label.setText(obj.objectName())
46
49
 
47
50
  return super().eventFilter(obj, event)