1

私はwxpythonで最初のGUIを書いています.NumCtrlから入力されたデータを、matplotlibで簡単に操作して目的のプロットを与えることができるデータ構造に適切に取得する方法にかなりこだわっています. 私のGUIテンプレートを以下に示します

GUI テンプレート

基本的に、角度ごとに、コリメータを配置した場合 (C) と配置しない場合 (U) のカウント数を入力します。プロット ボタンを押すと、各 wx.NumCtrl の数値を取得してグラフをプロットします。現在、カウントをスプレッドシートに入力し、ggplot2fromを使用してプロットしていRます。ただし、これを、同じスクリプト内で行われるプロットで記述された、よりユーザーフレンドリーな GUI に置き換えたいと考えています。目的の最終プロットの例を以下に示します

ここに画像の説明を入力

以下は、関連するコードのスニペットです。

#Set input boxes for results
numctrl_ccm90 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm90 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp90 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp90 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccm75 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm75 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp75 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp75 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccm60 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm60 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp60 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp60 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccm45 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm45 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp45 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp45 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccm30 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm30 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp30 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp30 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccm15 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucm15 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ccp15 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_ucp15 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_cc0 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_uc0 = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)
numctrl_fwhm = NumCtrl(panel,-1,style=wx.TE_PROCESS_ENTER|wx.TE_PROCESS_TAB)

fgs.AddMany([(angle),(count_c), (count_u),(angle2),(count_c2), (count_u2),
             (wx.StaticText(panel, -1, '-90')),
             (numctrl_ccm90,0,wx.EXPAND,5),
             (numctrl_ucm90,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '90')),
             (numctrl_ccp90,0,wx.EXPAND,5),
             (numctrl_ucp90,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '-75')),
             (numctrl_ccm75,0,wx.EXPAND,5),
             (numctrl_ucm75,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '75')),
             (numctrl_ccp75,0,wx.EXPAND,5),
             (numctrl_ucp75,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '-60')),
             (numctrl_ccm60,0,wx.EXPAND,5),
             (numctrl_ucm60,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '60')),
             (numctrl_ccp60,0,wx.EXPAND,5),
             (numctrl_ucp60,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '-45')),
             (numctrl_ccm45,0,wx.EXPAND,5),
             (numctrl_ucm45,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '45')),
             (numctrl_ccp45,0,wx.EXPAND,5),
             (numctrl_ucp45,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '-30')),
             (numctrl_ccm30,0,wx.EXPAND,5),
             (numctrl_ucm30,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '30')),
             (numctrl_ccp30,0,wx.EXPAND,5),
             (numctrl_ucp30,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '-15')),
             (numctrl_ccm15,0,wx.EXPAND,5),
             (numctrl_ucm15,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '15')),
             (numctrl_ccp15,0,wx.EXPAND,5),
             (numctrl_ucp15,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '0')),
             (numctrl_cc0,0,wx.EXPAND,5),
             (numctrl_uc0,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, '')),
             (wx.StaticText(panel, -1, 'FWHM')),
             (numctrl_fwhm,0,wx.EXPAND,5),
             (wx.StaticText(panel, -1, 'deg'))])

ここでnumctrl_ccm90、 およびnumctrl_ucp90は、-90 度でコリメートされたカウントと、コリメートされていない +90 度などのカウントに対応するウィジェットです。

各 NumCtrl ウィジェットのカウントで変数/リスト/辞書を更新する何らかのバインディングを作成する必要があると思います。これを行う方法と、その後のプロットに最適な形式がわかりません。たとえば、numctrl_ccm90 に 1234 カウントを入力すると、この情報を次のように保存したいと思います。counts: 1234 collimator:Y Angle: -90.

データの入力が終了したら、プロット ボタンを押します。これにより、各 numCtrl ボックス (fwhm numctrl を除く) のカウント値が取得され、このすべての情報がプロット可能な構造に配置されます。

プロットについて - コリメートされた検出器とコリメートされていない検出器の角度に対する正規化されたカウントをプロットします。このタスクにアプローチする最良の方法は何ですか。私はこの時点でかなり迷っています


私は今リストのリストに私のカウントを持っています

self.angle_list = []
self.angles_list.append([-90,'U',self.numctrl_ucm90.GetValue()])
self.angles_list.append([-75,'U',self.numctrl_ucm75.GetValue()])

angle_list の各要素は、[角度、コリメータ、カウント] の形式のリストです。

これがプロットにどのように役立つかわかりません。必要なのは、「U」と「C」の 2 つの組み合わせの角度とカウントの散布図です。

4

1 に答える 1