我使用winxp和wxpython(wxpython 3.1,python 2.6)来制作GUI程序,它将从TextCtrl复制文本到包含StaticText的ScrollablePanel。这一切工作正常,但是,滚动部分不正常工作。它似乎不会实时更新。当我最大化窗口并再次最大化时,滚动条会更新。但是,如果我再次开始在TextCtrl中输入内容(从而使用事件向ScrollablePanel中的StaticText添加文本),面板上的滚动条不会更新,除非我再次进行最小化等操作。wxpython滚动面板不更新滚动条
所以问题是,我怎样才能实时更新ScrolledPanel?我有一个事件设置等待文本在TextCtrl中更改,这是我认为更新需要去的地方。我试过更新,刷新和布局,但他们似乎没有太多。更大的问题是,什么最小化窗口和最大化它再次做更新,刷新和布局不?感谢您的帮助。对不起,我不能发布密码,保密。我希望你能给我提供任何帮助。我通常可以通过搜索找到问题,但我只是没有找到任何关于这类问题的文档。这是我第一次,但我从你的答案中得到很多帮助。再次感谢! :)
补充:
import wx
import wx.lib.inspection
from wx.lib.scrolledpanel import ScrolledPanel
class MyFrame(wx.Frame):
# TODO: add all class variables here for convention
tin = None
hsizer = None
def __init__(self, parent, ID, title):
wx.Frame.__init__(self, parent, ID, title,
wx.DefaultPosition, wx.Size(200, 150))
self.InitWidgets()
self.InitBindings()
self.InitFinish()
def InitWidgets(self):
self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
# Add the TextCtrl
vsizer = wx.BoxSizer(wx.VERTICAL)
self.tin = wx.TextCtrl(self, style=wx.TE_MULTILINE)
vsizer.Add(self.tin, 1, wx.EXPAND )
self.hsizer.Add(vsizer, 3, wx.TOP|wx.LEFT|wx.BOTTOM|wx.EXPAND, border=20)
# Add ScrolledPanel widget
self.hsizer.Add(wx.Size(200, -1), 1)
vsizer2 = wx.BoxSizer(wx.VERTICAL)
self.test_panel = ScrolledPanel(self)
self.test_panel.SetupScrolling()
# Setup static text (label) tvs is the
# vertical sizer inside the panel
self.tvs = wx.BoxSizer(wx.VERTICAL)
self.tin2 = wx.StaticText(self.test_panel)
self.tvs.Add(self.tin2, 0, wx.EXPAND)
vsizer2.Add(self.test_panel, 1, wx.EXPAND )
self.hsizer.Add(vsizer2, 3, wx.TOP|wx.LEFT|wx.BOTTOM|wx.EXPAND, border=20)
# Add Spacer
self.hsizer.Add(wx.Size(500, -1), 1)
def InitBindings(self):
self.tin.Bind(wx.EVT_TEXT, self.TextChange)
def InitFinish(self):
# Setup sizers and frame
self.SetAutoLayout(True)
self.test_panel.SetAutoLayout(True)
self.test_panel.SetSizer(self.tvs)
self.SetSizer(self.hsizer)
self.Layout()
self.Update()
self.Maximize()
def TextChange(self, event):
#self.CopyValues()
self.tin2.Label = self.tin.GetValue()
self.Layout()
self.Update()
self.test_panel.Refresh()
self.test_panel.Update()
print self.tin.GetValue().split("\n")
class MyApp(wx.App):
fr = None
def OnInit(self):
self.fr = MyFrame(None, -1, "TitleX")
self.fr.Show(True)
self.SetTopWindow(self.fr)
return True
app = MyApp(0)
app.MainLoop()
def main():
win = 1
if (__name__ == "__main__"):
main()
一般情况下,这是发生了什么事没有给予太多的计划的目的。我设置的虚拟尺寸会使面板的尺寸大于填充区域的尺寸,希望它具有永久滚动条,但情况并非如此。
我觉得你的代码的相关部分可能是发生在这里。它会帮助你得到更好的答案。我在这方面没有太多知识,但我猜这是一个非常具体的问题,可能是**你的**程序中的一个错误,所以,很难在没有看到你在做什么的情况下猜测问题。 – Trufa 2011-05-06 14:53:34
感谢您的回复,添加了我以上的可能 – Isaac 2011-05-06 15:16:18
也忘记提及我正在使用Windows XP操作系统 – Isaac 2011-05-06 15:25:02