gpt4 book ai didi

python - 面板内的 ScrolledPanel 未调整大小

转载 作者:行者123 更新时间:2023-12-01 06:06:24 25 4
gpt4 key购买 nike

我已经玩弄这个有一段时间了,但似乎无法弄清楚。self.panel = wx.Panel(self, wx.ID_ANY)

我的面板内有一个不滚动的scrolledPanel。

self.panel = wx.Panel(self, wx.ID_ANY)
self.stepPanel = wxscrollpanel.ScrolledPanel(self.panel, -1, style=wx.EXPAND)
self.stepPanel.SetupScrolling(scrollToTop=False)

sizer = wx.BoxSizer(wx.VERTICAL)
self.stepPanel.SetSizerAndFit(sizer)

更新功能是这样的......

sizer = self.stepPanel.GetSizer()
# Add some widgets
self.stepPanel.SetSizerAndFit(sizer)

稍后,当用户单击按钮时,我将小部件添加到 sizer ...我尝试过自动布局、FitInside()、Update() ...当我添加小部件时,似乎无法滚动此 stepPanel。

编辑:添加更多信息...

这里的想法是 self.panel 的顶部有一个不滚动的区域(只是另一个面板),而下部部分滚动(self.stepPanel),但看起来 stepPanel 是从可视区域中生长出来的self.panel 的区域

编辑:已解决,请参阅评论。

最佳答案

我想我已经明白了。像往常一样,在添加或删除小部件时,您需要在父级上调用 Layout,在本例中,父级是正在获取新子级的滚动面板。您还必须调用SetupScrolling(),以便它可以重新计算有多少空间以及是否需要滚动条。下面是一个在 Windows 上适用于我的示例:

import wx
import wx.lib.scrolledpanel as scrolled

########################################################################
class MyForm(wx.Frame):

#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial", size=(200,500))

# Add a panel so it looks the correct on all platforms
self.panel = wx.Panel(self, wx.ID_ANY)

# --------------------
# Scrolled panel stuff
self.scrolled_panel = scrolled.ScrolledPanel(self.panel, -1,
style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel1")
self.scrolled_panel.SetAutoLayout(1)
self.scrolled_panel.SetupScrolling()

words = "A Quick Brown Insane Fox Jumped Over the Fence and Ziplined to Cover".split()
self.spSizer = wx.BoxSizer(wx.VERTICAL)
for word in words:
text = wx.TextCtrl(self.scrolled_panel, value=word)
self.spSizer.Add(text)
self.scrolled_panel.SetSizer(self.spSizer)
# --------------------

btn = wx.Button(self.panel, label="Add Widget")
btn.Bind(wx.EVT_BUTTON, self.onAdd)

panelSizer = wx.BoxSizer(wx.VERTICAL)
panelSizer.AddSpacer(50)
panelSizer.Add(self.scrolled_panel, 1, wx.EXPAND)
panelSizer.Add(btn)
self.panel.SetSizer(panelSizer)

#----------------------------------------------------------------------
def onAdd(self, event):
""""""
print "in onAdd"
new_text = wx.TextCtrl(self.scrolled_panel, value="New Text")
self.spSizer.Add(new_text)
self.scrolled_panel.Layout()
self.scrolled_panel.SetupScrolling()

# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()

关于python - 面板内的 ScrolledPanel 未调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com