回答編集履歴
3
追記
answer
CHANGED
@@ -66,8 +66,8 @@
|
|
66
66
|
|
67
67
|
適材適所かと。私なら画面項目(パネル、ラベル、ボタン)はローカル変数にはしないです。
|
68
68
|
|
69
|
-
0. イベント…同じ種類の物(ラベル、テキストボックス)などに対して同じ処理を
|
69
|
+
0. イベント…同じ種類の物(ラベル、テキストボックス)などに対してイベント発生時に同じ処理を行いたい時。
|
70
|
-
引数にイベント
|
70
|
+
引数にイベント発生元が渡されるので、同じ処理をできます。
|
71
71
|
|
72
72
|
0. インスタンス変数…イベント発生元以外の項目に対してなんらかの処理を行いたい時(質問文の場合)
|
73
73
|
|
2
from functools import partial
answer
CHANGED
@@ -58,4 +58,77 @@
|
|
58
58
|
if __name__ == "__main__":
|
59
59
|
main()
|
60
60
|
|
61
|
-
```
|
61
|
+
```
|
62
|
+
|
63
|
+
---
|
64
|
+
|
65
|
+
> クラス内でメソッド間でボタン等の値を取得させようと思ったら、ローカル変数のような書き方は、始めからしない方が良いのでしょうか?
|
66
|
+
|
67
|
+
適材適所かと。私なら画面項目(パネル、ラベル、ボタン)はローカル変数にはしないです。
|
68
|
+
|
69
|
+
0. イベント…同じ種類の物(ラベル、テキストボックス)などに対して同じ処理をしたい時。
|
70
|
+
引数にイベントオブジェクトが渡されるので、同じ処理をできます。
|
71
|
+
|
72
|
+
0. インスタンス変数…イベント発生元以外の項目に対してなんらかの処理を行いたい時(質問文の場合)
|
73
|
+
|
74
|
+
回答には書きませんでしたが、3,functools#partialを使った手法もあります。
|
75
|
+
|
76
|
+
```Python
|
77
|
+
# -*- coding: utf-8 -*-
|
78
|
+
import wx
|
79
|
+
import os
|
80
|
+
from functools import partial
|
81
|
+
|
82
|
+
class MainFrame(wx.Frame):
|
83
|
+
|
84
|
+
def __init__(self):
|
85
|
+
wx.Frame.__init__(self, None, wx.ID_ANY, 'logplot')
|
86
|
+
panel = wx.Panel(self, wx.ID_ANY)
|
87
|
+
panel.SetBackgroundColour(wx.Colour(128, 128, 128))
|
88
|
+
|
89
|
+
#button
|
90
|
+
button_1 = wx.ToggleButton(panel, wx.ID_ANY, 'Line/Log')
|
91
|
+
button_1.Bind(wx.EVT_TOGGLEBUTTON, self.button_click)
|
92
|
+
|
93
|
+
# comboboxとbuttonの宣言順を変えている点に注意
|
94
|
+
#combobox
|
95
|
+
combobox_1 = wx.ComboBox(panel, wx.ID_ANY, 'select ScanList', choices = ("1","2","3"), style = wx.CB_READONLY)
|
96
|
+
combobox_1.Bind(wx.EVT_TEXT, partial(self.Ontext, btn=button_1))
|
97
|
+
|
98
|
+
#Text
|
99
|
+
text_1 = wx.StaticText(panel, wx.ID_ANY, )
|
100
|
+
|
101
|
+
vbox_1 = wx.BoxSizer(wx.VERTICAL)
|
102
|
+
vbox_1.Add(combobox_1, 0, wx.LEFT | wx.RIGHT, 10)
|
103
|
+
vbox_1.Add(button_1, 0, wx.RIGHT, 10)
|
104
|
+
vbox_1.Add(text_1, 0, wx.RIGHT, 10)
|
105
|
+
|
106
|
+
panel.SetSizer(vbox_1)
|
107
|
+
|
108
|
+
def button_click(self, event):
|
109
|
+
button_1 = event.GetEventObject()
|
110
|
+
if button_1.GetValue():
|
111
|
+
button_1.SetLabel("Log")
|
112
|
+
else:
|
113
|
+
button_1.SetLabel("Line")
|
114
|
+
print(button_1.GetValue())
|
115
|
+
|
116
|
+
def Ontext(self, event, btn):
|
117
|
+
print(btn.GetValue())
|
118
|
+
combobox_1 = event.GetEventObject()
|
119
|
+
print(combobox_1.GetValue())
|
120
|
+
|
121
|
+
|
122
|
+
#モジュール空間の汚染を避けるためにスコープを切る
|
123
|
+
def main() -> None:
|
124
|
+
app = wx.App()
|
125
|
+
MainFrame().Show()
|
126
|
+
app.MainLoop()
|
127
|
+
|
128
|
+
|
129
|
+
if __name__ == "__main__":
|
130
|
+
main()
|
131
|
+
|
132
|
+
```
|
133
|
+
◇参考情報
|
134
|
+
[functools.partial](https://docs.python.jp/3/library/functools.html#functools.partial)
|
1
追記
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
button_1 = wx.ToggleButton(panel, wx.ID_ANY, 'Line/Log')
|
3
3
|
```
|
4
4
|
|
5
|
-
スコープを
|
5
|
+
変数:`button_1`のスコープをローカル変数からインスタンス変数に変更すればよいかと。
|
6
6
|
|
7
7
|
```Python
|
8
8
|
# -*- coding: utf-8 -*-
|