wxPython - 旧面板的元素仍然存在

问题描述 投票:0回答:1

当我更改面板并重置它时,旧面板中的一些元素仍保留在新视图中(我在图片中用红色描边的元素)

enter image description here

您知道什么可能导致此行为吗?

将其发布在这里的代码确实很长,但实质上,每次您从右侧列表中选择一个元素时,我都会重新初始化面板。

    def __on_click_item_list(self, item):
            self.__mStockViewData = DataSynchronization.sync_single_stock_full_data(item.get_id(), item.get_sign())
            self.__mIsShowingChart5d = False
            self.__mIsShowingChart1Mo = False
            self.__mIsShowingChart3Mo = False
            self.__mIsShowingChart6Mo = False
            self.__mIsShowingChart1Y = False
            self.__mIsShowingChart2Y = False
            self.__mIsShowingChart5Y = False
            self.__mIsShowingChart10Y = False
            self.__mIsShowingChartYTD = False
            self.__mIsShowingChartMax = False
            self.__update_left_panel()
    
    def __update_left_panel(self):
            main = wx.BoxSizer(wx.VERTICAL)
            main.Add(self.__get_layout_nome_azienda(), 0, wx.EXPAND)
            main.Add(self.__get_layout_data_one(), 1, wx.EXPAND|wx.ALL)
            self.__mLeftPanel.SetSizer(main)
            if not self.__mThreadUpdateGraph.is_alive():
                self.__mThreadUpdateGraph.start()

def __get_layout_data_one(self):
        self.__mDataPanel = wx.Panel(self.__mLeftPanel)
        self.__mDataPanel.SetBackgroundColour((66, 66, 66))
        vbs = wx.BoxSizer(wx.VERTICAL)
        vbs.AddSpacer(10)
        self.__mGraphsSizer = wx.BoxSizer(wx.VERTICAL)
        self.__mGraphsSizer.Add(self.__get_chart_row_thread_managed(self.__mDataPanel, Strings.STR_1D_VALUES, Strings.STR_1D_VOLUME, self.__mStockViewData.get_timestamps(), self.__mStockViewData.get_opens(), self.__mStockViewData.get_closes(), self.__mStockViewData.get_volumes()), 0, wx.EXPAND)
        vbs.Add(self.__mGraphsSizer, 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_zero_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_first_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_second_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_third_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_fourth_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_fifth_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_sixth_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_seventh_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_eigth_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_nineth_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_ten_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_eleven_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_twelve_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_thirteen_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)
        vbs.Add(self.__get_fourteen_row_info(self.__mDataPanel), 0, wx.EXPAND)
        vbs.AddSpacer(10)


        self.__mDataPanel.SetSizer(vbs)
        return self.__mDataPanel
python wxpython
1个回答
0
投票

你知道有两种人,一种是说话的人,一种是做事的人。

我解决了这个问题。

改变了

def __update_left_panel(self):
            main = wx.BoxSizer(wx.VERTICAL)
            main.Add(self.__get_layout_nome_azienda(), 0, wx.EXPAND)
            main.Add(self.__get_layout_data_one(), 1, wx.EXPAND|wx.ALL)
            self.__mLeftPanel.SetSizer(main)
            if not self.__mThreadUpdateGraph.is_alive():
                self.__mThreadUpdateGraph.start()

致:

def __update_left_panel(self):
        if self.bsmain is not None:
            for child in self.bsmain.GetChildren():
                if child is not None and child.Window is not None:
                    self.bsmain.Hide(child.GetWindow())
                    self.bsmain.Layout()
        self.bsmain = wx.BoxSizer(wx.VERTICAL)
        self.bsmain.Add(self.__get_layout_nome_azienda(), 0, wx.EXPAND)
        self.bsmain.Add(self.__get_layout_data_one(), 1, wx.EXPAND|wx.ALL)
        self.__mLeftPanel.SetSizer(self.bsmain)
        self.bsmain.Update()
        self.bsmain.Layout()
        if not self.__mThreadUpdateGraph.is_alive():
            self.__mThreadUpdateGraph.start()

因此,我在重新初始化之前隐藏了每个 BOxSizer 子项。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.