Ejemplo n.º 1
0
class FigurePanel(wx.Panel):
    def __init__(self, parent, figure_window):
        super().__init__(parent)

        self.figure = Figure()
        self.canvas = FigureCanvas(self, -1, self.figure)
        # self.subplot = self.figure.subplots(1)

        figure_window.figure = self.figure
        figure_window.setUpFigLayout()
        figure_window.plot_data()
        figure_window.activate_sliders()

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, wx.SizerFlags(1).Left().Top().Shaped())
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()  # comment this out for no toolbar

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.canvas)
        self.toolbar.Realize()
        # By adding toolbar in sizer, we are able to put it at the bottom
        # of the frame - so appearance is closer to GTK version.
        self.sizer.Add(self.toolbar, wx.SizerFlags(0).Left())
        # update the axes menu on the toolbar
        self.toolbar.update()
Ejemplo n.º 2
0
class CanvasFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1,
                          'CanvasFrame', size=(550, 350))

        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)
        t = np.arange(0.0, 3.0, 0.01)
        s = np.sin(2 * np.pi * t)

        self.axes.plot(t, s)
        self.canvas = FigureCanvas(self, -1, self.figure)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()  # comment this out for no toolbar

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.canvas)
        self.toolbar.Realize()
        # By adding toolbar in sizer, we are able to put it at the bottom
        # of the frame - so appearance is closer to GTK version.
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        # update the axes menu on the toolbar
        self.toolbar.update()
Ejemplo n.º 3
0
class CanvasFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'CanvasFrame', size=(550, 350))

        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)
        t = np.arange(0.0, 3.0, 0.01)
        s = np.sin(2 * np.pi * t)

        self.axes.plot(t, s)
        self.canvas = FigureCanvas(self, -1, self.figure)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()  # comment this out for no toolbar

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.canvas)
        self.toolbar.Realize()
        # By adding toolbar in sizer, we are able to put it at the bottom
        # of the frame - so appearance is closer to GTK version.
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        # update the axes menu on the toolbar
        self.toolbar.update()
Ejemplo n.º 4
0
class PlotFrame(wx.Frame):
    def __init__(self, parent, toolbar=True):
        wx.Frame.__init__(self, parent, -1, 'CanvasFrame', size=(550, 350))
        self.figure = PlotCanvas(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.figure, 1, wx.LEFT | wx.TOP | wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Fit()
        self.add_subplot = self.figure.add_subplot
        if toolbar: self.add_toolbar()
        self.Bind(wx.EVT_IDLE, self.on_idle)

    def on_idle(self, event):
        if self.GetTitle() != self.figure.title:
            self.SetTitle(self.figure.title)

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.figure)
        self.toolbar.Realize()
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.update()
Ejemplo n.º 5
0
class FrameCanvas(wx.Frame):
    def __init__(self, *args, **kw):
        super(FrameCanvas, self).__init__(*args, **kw)

        self.fig = Figure()
        self.canvas = FigureCanvas(self, -1, self.fig)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Fit()

        self.add_toolbar()  # comment this out for no toolbar

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.canvas)
        self.toolbar.Realize()
        # By adding toolbar in sizer, we are able to put it at the bottom
        # of the frame - so appearance is closer to GTK version.
        self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        # update the axes menu on the toolbar
        self.toolbar.update()
Ejemplo n.º 6
0
class PlotNoteFrame(wx.Frame):
    def __init__(self, parent, toolbar=True):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          title='CanvasNoteFrame',
                          pos=wx.DefaultPosition,
                          size=wx.Size(800, 600),
                          style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.notebook = PlotNoteBook(self)
        self.figure = self.notebook.figure
        sizer.Add(self.notebook, 1, wx.EXPAND | wx.ALL, 0)
        self.SetSizer(sizer)
        self.add_figure = self.notebook.add_figure
        #if toolbar: self.add_toolbar()
        self.Layout()

    def add_toolbar(self):
        self.toolbar = NavigationToolbar(self.notebook)
        self.toolbar.Realize()
        self.GetSizer().Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
        self.toolbar.update()
Ejemplo n.º 7
0
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((1766, 900))
        self.GUI_statusbar = self.CreateStatusBar(3)
        self.GUI_btn_cloudload = wx.Button(self, wx.ID_ANY, u"雲端讀取")
        self.GUI_btn_inputdata = wx.Button(self, wx.ID_ANY, u"輸入資料")
        self.GUI_btn_test = wx.Button(self, wx.ID_ANY, u"測試")
        self.notebook_main = wx.Notebook(self, wx.ID_ANY)
        self.notebook_main_pane_1 = wx.Panel(self.notebook_main, wx.ID_ANY)
        self.window_2 = wx.SplitterWindow(self.notebook_main_pane_1, wx.ID_ANY)
        self.panel_6 = wx.Panel(self.window_2, wx.ID_ANY)
        self.matplotlib_figure_2 = Figure()
        self.GUI_matplotlib_canvas_2 = FigureCanvas(self.panel_6, wx.ID_ANY, self.matplotlib_figure_2)
        self.GUI_matplotlib_toolbar_2 = NavigationToolbar(self.GUI_matplotlib_canvas_2)
        self.GUI_matplotlib_toolbar_2.Realize()
        self.GUI_matplotlib_toolbar_2.update()
        self.panel_5 = wx.Panel(self.panel_6, wx.ID_ANY)
        self.GUI_quick_product_sel = wx.ComboBox(self.panel_5, wx.ID_ANY, choices=["NQ", "XINA50", "2454"], style=wx.CB_DROPDOWN | wx.CB_READONLY)
        self.GUI_quick_multiplier = wx.ComboBox(self.panel_5, wx.ID_ANY, choices=["1", "20", "2000"], style=wx.CB_DROPDOWN)
        self.GUI_quick_max_netvalue = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "26.0", min=0.0, max=9999999999.9)
        self.GUI_quick_current_netvalue = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "25.0", min=0.0, max=9999999999.9)
        self.GUI_quick_stoploss_rate = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "0.1", min=0.0, max=1.0)
        self.GUI_quick_current_price = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "12600.0", min=0.0, max=9999999999.9)
        self.GUI_Q_T1_current_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T1_avg_buy_price = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "0.0", min=0.0, max=9999999999.9)
        self.GUI_Q_T1_avg_buy_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T1_avg_buy_count = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "1", min=1, max=100)
        self.GUI_Q_T2_current_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T2_avg_buy_price = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "0.0", min=0.0, max=9999999999.9)
        self.GUI_Q_T2_avg_buy_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T2_avg_buy_count = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "1", min=1, max=100)
        self.GUI_Q_T3_current_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T3_avg_buy_price = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "0.0", min=0.0, max=9999999999.9)
        self.GUI_Q_T3_avg_buy_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T3_avg_buy_count = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "1", min=1, max=100)
        self.GUI_Q_T4_current_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T4_avg_buy_price = wx.SpinCtrlDouble(self.panel_5, wx.ID_ANY, "0.0", min=0.0, max=9999999999.9)
        self.GUI_Q_T4_avg_buy_pos = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "0", min=-100, max=100)
        self.GUI_Q_T4_avg_buy_count = wx.SpinCtrl(self.panel_5, wx.ID_ANY, "1", min=1, max=100)
        self.GUI_Q_button_apply = wx.Button(self.panel_5, wx.ID_APPLY, "")
        self.notebook_2 = wx.Notebook(self.window_2, wx.ID_ANY, style=wx.NB_BOTTOM)
        self.ui_page_message_copy = wx.ScrolledWindow(self.notebook_2, wx.ID_ANY, style=wx.TAB_TRAVERSAL)
        self.GUI_message_copy = wx.TextCtrl(self.ui_page_message_copy, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_READONLY)
        self.ui_page_log_copy = wx.Panel(self.notebook_2, wx.ID_ANY)
        self.notebook_main_pane_main = wx.Panel(self.notebook_main, wx.ID_ANY)
        self.window_1 = wx.SplitterWindow(self.notebook_main_pane_main, wx.ID_ANY)
        self.panel_2 = wx.Panel(self.window_1, wx.ID_ANY)
        self.matplotlib_figure = Figure()
        self.GUI_matplotlib_canvas = FigureCanvas(self.panel_2, wx.ID_ANY, self.matplotlib_figure)
        self.GUI_matplotlib_toolbar = NavigationToolbar(self.GUI_matplotlib_canvas)
        self.GUI_matplotlib_toolbar.Realize()
        self.GUI_matplotlib_toolbar.update()
        self.panel_1 = wx.Panel(self.panel_2, wx.ID_ANY)
        self.ui_initial_position = wx.SpinCtrl(self.panel_1, wx.ID_ANY, "0", min=0, max=100)
        self.ui_extra_position = wx.ComboBox(self.panel_1, wx.ID_ANY, choices=[], style=wx.CB_DROPDOWN)
        self.ui_extra_time = wx.ComboBox(self.panel_1, wx.ID_ANY, choices=[], style=wx.CB_DROPDOWN)
        self.notebook_1 = wx.Notebook(self.window_1, wx.ID_ANY, style=wx.NB_BOTTOM)
        self.ui_page_message = wx.ScrolledWindow(self.notebook_1, wx.ID_ANY, style=wx.TAB_TRAVERSAL)
        self.GUI_message = wx.TextCtrl(self.ui_page_message, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_READONLY)
        self.ui_page_log = wx.Panel(self.notebook_1, wx.ID_ANY)
        self.notebook_main_pane_LOG = wx.Panel(self.notebook_main, wx.ID_ANY)
        self.GUI_log = wx.TextCtrl(self.notebook_main_pane_LOG, wx.ID_ANY, "", style=wx.TE_AUTO_URL | wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH | wx.TE_RICH2)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnCloudLoad, self.GUI_btn_cloudload)
        self.Bind(wx.EVT_BUTTON, self.OnInputData, self.GUI_btn_inputdata)
        self.Bind(wx.EVT_BUTTON, self.OnTest, self.GUI_btn_test)
        self.Bind(wx.EVT_COMBOBOX, self.OnQuickSimProductSelect, self.GUI_quick_product_sel)
        self.Bind(wx.EVT_BUTTON, self.OnQuickSimApply, self.GUI_Q_button_apply)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("InvestSim (Pre-Alpha)")
        _icon = wx.NullIcon
        _icon.CopyFromBitmap(wx.Bitmap(os.path.join(RES_DIR,"icon-nobita-50x50.jpg"), wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.GUI_statusbar.SetStatusWidths([-1, -1, -5])

        # statusbar fields
        GUI_statusbar_fields = ["Ready", "Clouds Lee Yun-Ting", ""]
        for i in range(len(GUI_statusbar_fields)):
            self.GUI_statusbar.SetStatusText(GUI_statusbar_fields[i], i)
        self.GUI_btn_cloudload.SetBitmap(wx.Bitmap(os.path.join(RES_DIR,"cloudload-30x30.png"), wx.BITMAP_TYPE_ANY))
        self.GUI_btn_inputdata.SetBitmap(wx.Bitmap(os.path.join(RES_DIR,"gspread-30x30.png"), wx.BITMAP_TYPE_ANY))
        self.GUI_btn_test.SetBitmap(wx.Bitmap(os.path.join(RES_DIR,"test-30x30.jpg"), wx.BITMAP_TYPE_ANY))
        self.GUI_quick_product_sel.SetSelection(1)
        self.GUI_quick_multiplier.SetSelection(0)
        self.GUI_quick_stoploss_rate.SetIncrement(0.1)
        self.GUI_Q_T1_current_pos.SetMinSize((50, 25))
        self.GUI_Q_T1_avg_buy_pos.SetMinSize((50, 25))
        self.GUI_Q_T1_avg_buy_count.SetMinSize((50, 25))
        self.GUI_Q_T2_current_pos.SetMinSize((50, 25))
        self.GUI_Q_T2_avg_buy_pos.SetMinSize((50, 25))
        self.GUI_Q_T2_avg_buy_count.SetMinSize((50, 25))
        self.GUI_Q_T3_current_pos.SetMinSize((50, 25))
        self.GUI_Q_T3_avg_buy_pos.SetMinSize((50, 25))
        self.GUI_Q_T3_avg_buy_count.SetMinSize((50, 25))
        self.GUI_Q_T4_current_pos.SetMinSize((50, 25))
        self.GUI_Q_T4_avg_buy_pos.SetMinSize((50, 25))
        self.GUI_Q_T4_avg_buy_count.SetMinSize((50, 25))
        self.ui_page_message_copy.SetScrollRate(10, 10)
        self.window_2.SetMinimumPaneSize(100)
        self.window_2.SetSashGravity(0.5)
        self.ui_page_message.SetScrollRate(10, 10)
        self.window_1.SetMinimumPaneSize(100)
        self.window_1.SetSashGravity(0.5)
        self.GUI_log.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INFOBK))
        self.notebook_main.SetFont(wx.Font(11, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_LIGHT, 0, ""))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_5 = wx.BoxSizer(wx.VERTICAL)
        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        Sizer_Input = wx.StaticBoxSizer(wx.StaticBox(self.panel_1, wx.ID_ANY, u"輸入"), wx.HORIZONTAL)
        grid_sizer_1 = wx.GridSizer(3, 2, 0, 0)
        Sizer_Chart = wx.StaticBoxSizer(wx.StaticBox(self.panel_2, wx.ID_ANY, u"線圖"), wx.VERTICAL)
        sizer_7 = wx.BoxSizer(wx.VERTICAL)
        sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_12 = wx.BoxSizer(wx.VERTICAL)
        Sizer_trial_copy_2 = wx.StaticBoxSizer(wx.StaticBox(self.panel_5, wx.ID_ANY, u"試算4"), wx.HORIZONTAL)
        Sizer_trial_copy_1 = wx.StaticBoxSizer(wx.StaticBox(self.panel_5, wx.ID_ANY, u"試算3"), wx.HORIZONTAL)
        Sizer_trial_copy = wx.StaticBoxSizer(wx.StaticBox(self.panel_5, wx.ID_ANY, u"試算2"), wx.HORIZONTAL)
        Sizer_trial = wx.StaticBoxSizer(wx.StaticBox(self.panel_5, wx.ID_ANY, u"試算1"), wx.HORIZONTAL)
        Sizer_Input_common = wx.StaticBoxSizer(wx.StaticBox(self.panel_5, wx.ID_ANY, u"共用資訊"), wx.VERTICAL)
        grid_sizer_2 = wx.GridSizer(5, 2, 0, 0)
        sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_10 = wx.BoxSizer(wx.HORIZONTAL)
        Sizer_Chart_copy = wx.StaticBoxSizer(wx.StaticBox(self.panel_6, wx.ID_ANY, u"線圖"), wx.VERTICAL)
        sizer_4 = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, u"功能"), wx.HORIZONTAL)
        sizer_4.Add(self.GUI_btn_cloudload, 0, wx.ALL, 2)
        sizer_4.Add(self.GUI_btn_inputdata, 0, wx.ALL, 2)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add((0, 0), 0, 0, 0)
        sizer_4.Add(self.GUI_btn_test, 0, wx.ALL, 2)
        sizer_1.Add(sizer_4, 0, wx.ALL | wx.EXPAND, 2)
        Sizer_Chart_copy.Add(self.GUI_matplotlib_canvas_2, 1, wx.ALL | wx.EXPAND, 2)
        Sizer_Chart_copy.Add(self.GUI_matplotlib_toolbar_2, 0, wx.EXPAND, 0)
        sizer_8.Add(Sizer_Chart_copy, 1, wx.ALL | wx.EXPAND, 0)
        label_4 = wx.StaticText(self.panel_5, wx.ID_ANY, u"產品")
        sizer_10.Add(label_4, 0, wx.ALL, 2)
        sizer_10.Add(self.GUI_quick_product_sel, 0, wx.ALL, 2)
        grid_sizer_2.Add(sizer_10, 1, wx.EXPAND, 0)
        label_5 = wx.StaticText(self.panel_5, wx.ID_ANY, u"乘數")
        sizer_11.Add(label_5, 0, wx.ALL, 2)
        sizer_11.Add(self.GUI_quick_multiplier, 0, wx.ALL | wx.EXPAND, 2)
        grid_sizer_2.Add(sizer_11, 1, wx.EXPAND, 0)
        label_6 = wx.StaticText(self.panel_5, wx.ID_ANY, u"最大淨值(K)")
        grid_sizer_2.Add(label_6, 0, wx.ALL, 2)
        grid_sizer_2.Add(self.GUI_quick_max_netvalue, 0, wx.ALL, 2)
        label_7 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前淨值(K)")
        grid_sizer_2.Add(label_7, 0, wx.ALL, 2)
        grid_sizer_2.Add(self.GUI_quick_current_netvalue, 0, wx.ALL, 2)
        label_8 = wx.StaticText(self.panel_5, wx.ID_ANY, u"可損失比率")
        grid_sizer_2.Add(label_8, 0, wx.ALL, 2)
        grid_sizer_2.Add(self.GUI_quick_stoploss_rate, 0, wx.ALL, 2)
        label_9 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前價格")
        grid_sizer_2.Add(label_9, 0, wx.ALL, 2)
        grid_sizer_2.Add(self.GUI_quick_current_price, 0, wx.ALL, 2)
        Sizer_Input_common.Add(grid_sizer_2, 0, 0, 0)
        sizer_12.Add(Sizer_Input_common, 0, wx.ALL, 1)
        label_10 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前\n口數")
        Sizer_trial.Add(label_10, 0, wx.ALL, 1)
        Sizer_trial.Add(self.GUI_Q_T1_current_pos, 0, wx.ALL, 1)
        label_11 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n價格")
        Sizer_trial.Add(label_11, 0, wx.ALL, 1)
        Sizer_trial.Add(self.GUI_Q_T1_avg_buy_price, 0, wx.ALL, 2)
        label_12 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n口數")
        Sizer_trial.Add(label_12, 0, wx.ALL, 1)
        Sizer_trial.Add(self.GUI_Q_T1_avg_buy_pos, 0, wx.ALL, 1)
        label_13 = wx.StaticText(self.panel_5, wx.ID_ANY, u"分批\n次數")
        Sizer_trial.Add(label_13, 0, wx.ALL, 1)
        Sizer_trial.Add(self.GUI_Q_T1_avg_buy_count, 0, 0, 0)
        sizer_12.Add(Sizer_trial, 0, 0, 0)
        label_14 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前\n口數")
        Sizer_trial_copy.Add(label_14, 0, wx.ALL, 1)
        Sizer_trial_copy.Add(self.GUI_Q_T2_current_pos, 0, wx.ALL, 1)
        label_15 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n價格")
        Sizer_trial_copy.Add(label_15, 0, wx.ALL, 1)
        Sizer_trial_copy.Add(self.GUI_Q_T2_avg_buy_price, 0, wx.ALL, 2)
        label_16 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n口數")
        Sizer_trial_copy.Add(label_16, 0, wx.ALL, 1)
        Sizer_trial_copy.Add(self.GUI_Q_T2_avg_buy_pos, 0, wx.ALL, 1)
        label_17 = wx.StaticText(self.panel_5, wx.ID_ANY, u"分批\n次數")
        Sizer_trial_copy.Add(label_17, 0, wx.ALL, 1)
        Sizer_trial_copy.Add(self.GUI_Q_T2_avg_buy_count, 0, 0, 0)
        sizer_12.Add(Sizer_trial_copy, 0, 0, 0)
        label_18 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前\n口數")
        Sizer_trial_copy_1.Add(label_18, 0, wx.ALL, 1)
        Sizer_trial_copy_1.Add(self.GUI_Q_T3_current_pos, 0, wx.ALL, 1)
        label_19 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n價格")
        Sizer_trial_copy_1.Add(label_19, 0, wx.ALL, 1)
        Sizer_trial_copy_1.Add(self.GUI_Q_T3_avg_buy_price, 0, wx.ALL, 2)
        label_20 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n口數")
        Sizer_trial_copy_1.Add(label_20, 0, wx.ALL, 1)
        Sizer_trial_copy_1.Add(self.GUI_Q_T3_avg_buy_pos, 0, wx.ALL, 1)
        label_21 = wx.StaticText(self.panel_5, wx.ID_ANY, u"分批\n次數")
        Sizer_trial_copy_1.Add(label_21, 0, wx.ALL, 1)
        Sizer_trial_copy_1.Add(self.GUI_Q_T3_avg_buy_count, 0, 0, 0)
        sizer_12.Add(Sizer_trial_copy_1, 0, 0, 0)
        label_22 = wx.StaticText(self.panel_5, wx.ID_ANY, u"目前\n口數")
        Sizer_trial_copy_2.Add(label_22, 0, wx.ALL, 1)
        Sizer_trial_copy_2.Add(self.GUI_Q_T4_current_pos, 0, wx.ALL, 1)
        label_23 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n價格")
        Sizer_trial_copy_2.Add(label_23, 0, wx.ALL, 1)
        Sizer_trial_copy_2.Add(self.GUI_Q_T4_avg_buy_price, 0, wx.ALL, 2)
        label_24 = wx.StaticText(self.panel_5, wx.ID_ANY, u"加碼\n口數")
        Sizer_trial_copy_2.Add(label_24, 0, wx.ALL, 1)
        Sizer_trial_copy_2.Add(self.GUI_Q_T4_avg_buy_pos, 0, wx.ALL, 1)
        label_25 = wx.StaticText(self.panel_5, wx.ID_ANY, u"分批\n次數")
        Sizer_trial_copy_2.Add(label_25, 0, wx.ALL, 1)
        Sizer_trial_copy_2.Add(self.GUI_Q_T4_avg_buy_count, 0, 0, 0)
        sizer_12.Add(Sizer_trial_copy_2, 0, 0, 0)
        sizer_12.Add(self.GUI_Q_button_apply, 0, wx.ALIGN_CENTER, 0)
        self.panel_5.SetSizer(sizer_12)
        sizer_8.Add(self.panel_5, 0, 0, 0)
        self.panel_6.SetSizer(sizer_8)
        sizer_9.Add(self.GUI_message_copy, 1, wx.ALL | wx.EXPAND, 2)
        self.ui_page_message_copy.SetSizer(sizer_9)
        self.notebook_2.AddPage(self.ui_page_message_copy, u"訊息")
        self.notebook_2.AddPage(self.ui_page_log_copy, "log")
        self.window_2.SplitHorizontally(self.panel_6, self.notebook_2, 605)
        sizer_7.Add(self.window_2, 1, wx.EXPAND, 0)
        self.notebook_main_pane_1.SetSizer(sizer_7)
        Sizer_Chart.Add(self.GUI_matplotlib_canvas, 1, wx.ALL | wx.EXPAND, 2)
        Sizer_Chart.Add(self.GUI_matplotlib_toolbar, 0, wx.EXPAND, 0)
        sizer_2.Add(Sizer_Chart, 1, wx.ALL | wx.EXPAND, 0)
        label_1 = wx.StaticText(self.panel_1, wx.ID_ANY, u"初始口數")
        grid_sizer_1.Add(label_1, 0, wx.ALL, 2)
        grid_sizer_1.Add(self.ui_initial_position, 0, wx.ALL, 2)
        label_2 = wx.StaticText(self.panel_1, wx.ID_ANY, u"加碼口數")
        grid_sizer_1.Add(label_2, 0, wx.ALL, 2)
        grid_sizer_1.Add(self.ui_extra_position, 0, wx.ALL, 2)
        label_3 = wx.StaticText(self.panel_1, wx.ID_ANY, u"加碼次數")
        grid_sizer_1.Add(label_3, 0, wx.ALL, 2)
        grid_sizer_1.Add(self.ui_extra_time, 0, wx.ALL, 2)
        Sizer_Input.Add(grid_sizer_1, 1, 0, 0)
        self.panel_1.SetSizer(Sizer_Input)
        sizer_2.Add(self.panel_1, 0, 0, 0)
        self.panel_2.SetSizer(sizer_2)
        sizer_3.Add(self.GUI_message, 1, wx.ALL | wx.EXPAND, 2)
        self.ui_page_message.SetSizer(sizer_3)
        self.notebook_1.AddPage(self.ui_page_message, u"訊息")
        self.notebook_1.AddPage(self.ui_page_log, "log")
        self.window_1.SplitHorizontally(self.panel_2, self.notebook_1, 450)
        sizer_5.Add(self.window_1, 1, wx.EXPAND, 0)
        self.notebook_main_pane_main.SetSizer(sizer_5)
        sizer_6.Add(self.GUI_log, 1, wx.ALL | wx.EXPAND, 2)
        self.notebook_main_pane_LOG.SetSizer(sizer_6)
        self.notebook_main.AddPage(self.notebook_main_pane_1, u"快速試算")
        self.notebook_main.AddPage(self.notebook_main_pane_main, u"趨勢")
        self.notebook_main.AddPage(self.notebook_main_pane_LOG, "LOG")
        sizer_1.Add(self.notebook_main, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        self.Centre()
        # end wxGlade

    def OnCloudLoad(self, event):  # wxGlade: MyFrame.<event_handler>
        print("Event handler 'OnCloudLoad' not implemented!")
        event.Skip()

    def OnInputData(self, event):  # wxGlade: MyFrame.<event_handler>
        print("Event handler 'OnInputData' not implemented!")
        event.Skip()

    def OnTest(self, event):  # wxGlade: MyFrame.<event_handler>
        print("Event handler 'OnTest' not implemented!")
        event.Skip()

    def OnQuickSimProductSelect(self, event):  # wxGlade: MyFrame.<event_handler>
        print("Event handler 'OnQuickSimProductSelect' not implemented!")
        event.Skip()

    def OnQuickSimApply(self, event):  # wxGlade: MyFrame.<event_handler>
        print("Event handler 'OnQuickSimApply' not implemented!")
        event.Skip()