Подскажите, кто знает, плз.
Мне необходимо динамически создавать и убирать с экрана виджеты.
Пробую нижеприведенный код.
По меню'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)
- Форум Передача параметров QLineEdit одного окна в вызываемое окно (2014)
- Форум [gtk][pygtk] Неправильная реакция на обработчики сигналов «test-collapse-row» и «test-expand-row» виджета gtk.TreeView (2011)
- Форум Обмен данными между двумя формами pyqt5 (2016)
- Форум Вопрос по event в qt. Реализовал вопрос при выходе, как мне кажется, не самым лучшим образом. (2015)
- Форум Проблемки с производительностью (2012)
- Форум Tkinter (theme) (2015)