Подскажите, кто знает, плз. Мне необходимо динамически создавать и убирать с экрана виджеты. Пробую нижеприведенный код. По меню'Add Buttons' все работает правильно только первый раз. Команда по меню 'Close Buttons' вообще не работает. 'Destroy Buttons'работает всегда. Последовательно 'Add Buttons', затем 'Destroy Buttons', и снова 'Add Buttons' - во втором случае получаем одну кнопку вместо 6 и она неактивна. Возможно, так выходит, потому что Sizer != Window. Как исправить код, чтоб после Destroy()получать полноценные кнопки в нужном количестве? спасибо Democode: ------------ #!/usr/local/bin/python # -*- coding: utf-8 -*- import wx import os ID_ADD=100 ID_BUTTON1 = 110 ID_REM = 300 ID_DES = 400 ID_EXIT=200 class MainWindow(wx.Frame): def __init__(self,parent,id,title): self.dirname='' wx.Frame.__init__(self,parent,wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE| wx.NO_FULL_REPAINT_ON_RESIZE) self.CreateStatusBar() # A Statusbar in the bottom of the window # Setting up the menu. filemenu= wx.Menu() filemenu.Append(ID_ADD, "&Add buttons","") filemenu.Append(ID_REM, "&Close buttons","") filemenu.Append(ID_DES, "&Destroy buttons","") filemenu.AppendSeparator() filemenu.Append(ID_EXIT,"E&xit"," Terminate the program") # Creating the menubar. menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content. wx.EVT_MENU(self, ID_ADD, self.OnAdd) wx.EVT_MENU(self, ID_EXIT, self.OnExit) wx.EVT_MENU(self, ID_REM, self.OnRem) wx.EVT_MENU(self, ID_DES, self.OnDes) self.Show(1) def OnExit(self,e): self.Close(True) # Close the frame. def OnRem(self,e): for i in range(0,6): self.buttons[i].Close(True) def OnAdd(self,e): #add buttons self.sizer2 = wx.BoxSizer(wx.HORIZONTAL) self.buttons=[] for i in range(0,6): self.buttons.append(wx.Button(self, ID_BUTTON1+i, "Button &"+`i`)) self.sizer2.Add(self.buttons[i],1,wx.EXPAND) # Use some sizers to see layout options self.sizer=wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.sizer2,0,wx.EXPAND) #Layout sizers self.SetSizer(self.sizer) self.SetAutoLayout(1) self.sizer.Fit(self) def OnDes(self,e): for i in range(0,6): self.buttons[i].Destroy() app = wx.PySimpleApp() frame = MainWindow(None, -1, "Sample editor") app.MainLoop()
Ответ на:
комментарий
от redvasily
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум wxPython - resize для окна (2005)
- Форум Сайзеры в wxPython (2015)
- Форум python+Tkinter память (2005)
- Форум Как в Python & tkinter при использовании MVC создать главное окно программы? (2017)
- Форум mplayerctrl python (2014)
- Форум Передача параметров QLineEdit одного окна в вызываемое окно (2014)
- Форум [gtk][pygtk] Неправильная реакция на обработчики сигналов «test-collapse-row» и «test-expand-row» виджета gtk.TreeView (2011)
- Форум Обмен данными между двумя формами pyqt5 (2016)
- Форум Вопрос по event в qt. Реализовал вопрос при выходе, как мне кажется, не самым лучшим образом. (2015)
- Форум Проблемки с производительностью (2012)