我使用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