如何完整卸载wxpython_如何在wxPython的笔记本页面中添加和删除控件?

基于用户交互,我想动态地添加和删除wxPython笔记本中的面板控件。我最彻底尝试的方法是在面板的sizer上调用.Clear()并添加所有新控件。但是,在Windows 7和Linux桌面上,渲染工件和陈旧控件在新内容下仍然可见。我怎样才能完全删除旧的控件,并添加新的控件没有这些工件?如何在wxPython的笔记本页面中添加和删除控件?

下面是转载的Windows 7注StaticPanel和DynamicPanel两种不同.update()方法问题的一个范例程序:

#!/usr/bin/python

import wx

import sys

class StaticPane(wx.Panel):

"""A panel that contains simple text that is updated

when the .update() method is called. The text is updated

using .SetText(), and the text control sticks around

between calls to .update()."""

def __init__(self, *args, **kwargs):

super(StaticPane, self).__init__(*args, **kwargs)

self._sizer = wx.BoxSizer(wx.VERTICAL)

self.SetSizer(self._sizer)

self._counter = 0

self._base_text = "Some Text"

self._text = wx.TextCtrl(self, -1,

self._base_text + "!" * self._counter,

style=wx.TE_READONLY)

self._sizer.Add(self._text, -1, wx.EXPAND)

def update(self):

self._counter += 1

self._text.SetValue(self._base_text + "!" * self._counter)

class DynamicPane(wx.Panel):

"""A panel that contains simple text that is updated

when the .update() method is called. The text is updated

by removing the existing text control, and adding a new one

with the updated text string."""

def __init__(self, *args, **kwargs):

super(DynamicPane, self).__init__(*args, **kwargs)

self._sizer = wx.BoxSizer(wx.VERTICAL)

self.SetSizer(self._sizer)

self._counter = 0

self._base_text = "Some Text"

self._text = wx.TextCtrl(self, -1,

self._base_text + "!" * self._counter,

style=wx.TE_READONLY)

self._sizer.Add(self._text, -1, wx.EXPAND)

def update(self):

self._counter += 1

self._sizer.Clear()

self._text = wx.TextCtrl(self, -1,

self._base_text + "!" * self._counter,

style=wx.TE_READONLY)

self._sizer.Add(self._text, -1, wx.EXPAND)

self.Layout()

class TestViewer(wx.Frame):

"""A Frame with a button and a notebook. When the button is pressed,

each of the two pages in the notebook recieve a call to .update().

"""

def __init__(self, parent):

super(TestViewer, self).__init__(parent, -1, "Test Viewer")

self.Bind(wx.EVT_CLOSE, self.OnClose)

self._panel = wx.Panel(self)

vbox = wx.BoxSizer(wx.VERTICAL)

self._panel.SetSizer(vbox)

update_button = wx.Button(self._panel, wx.ID_CLOSE, "Update")

update_button.Bind(wx.EVT_BUTTON, self.update)

vbox.Add(update_button, 0, wx.EXPAND)

self._nb = wx.Notebook(self._panel)

self._view_one = StaticPane(self._nb, -1)

self._view_two = DynamicPane(self._nb, -1)

self._nb.AddPage(self._view_one, "One")

self._nb.AddPage(self._view_two, "Two")

vbox.Add(self._nb, 1, wx.EXPAND | wx.ALL)

self.Layout()

def update(self, e):

self._view_one.update()

self._view_two.update()

def OnClose(self, event):

sys.exit(0)

if __name__ == "__main__":

app = wx.App(False)

frame = TestViewer(None)

frame.Show()

app.MainLoop()

点击按钮“更新”,以更新两个面板的文本。第一个面板通过使用.SetText()来更新文本控件,而第二个面板用新的面板替换TextCtrl。请注意,当您调整窗口大小或在点击几次按钮后将鼠标悬停在第二个面板上时,会出现重叠控件和其他工件。

以下是显示堆叠控件的截图。两个图像都是在相同数量的按钮点击之后拍摄的,它们只显示处于相同状态的两个不同的面板。我期望的文字是完全一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值