当我更改面板并重置它时,旧面板中的一些元素仍保留在新视图中(我在图片中用红色描边的元素)
您知道什么可能导致此行为吗?
将其发布在这里的代码确实很长,但实质上,每次您从右侧列表中选择一个元素时,我都会重新初始化面板。
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
你知道有两种人,一种是说话的人,一种是做事的人。
我解决了这个问题。
改变了
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 子项。