-wx.Tybook 안의 wxPython wx.ScrolledPanel이 자동으로 크기 조정되지 않음
안녕하세요!
필자는 스크롤바가 필요하므로 기본 패널을 ScrolledPanel로 변경했지만 ScrolledPanel에 삽입 한 내용으로는 윈도우 크기에 따라 자동으로 크기가 조정되지 않습니다. 그런 다음 기본 패널을 만들고 BoxSizer를 통해 모든 위젯을 삽입하고 마지막으로 다른 BoxSizer를 통해이 패널을 ScrolledPanel에 삽입하려고 시도했지만 내용은 자동 크기 조정을 수행하지 않고 계속됩니다. 나는 또한 표준 패널을 만들고 BoxSizers를 사용하여 내 ScrolledPanel 내부에 삽입했지만 작동하지도 않는 반대를 시도했습니다. 또 다른 세부 사항은 각 ScrolledPanel의 호출을 관리하는 트리가 있으므로이 ScrolledPanels가 TreeBook 안에 있어야한다는 것입니다. 나는 잘못하고 있다고 생각하지만, 그것이 무엇인지, 어떻게하는지 모른다.
내 코드 :
import wx
import wx.lib.scrolledpanel as scrolled
from gettext import gettext as _
class MyMainView(wx.Frame):
instance = None
init = 0
def __init__(self, app):
if self.init:
return
self.frameWidth = 850
self.frameHeight = 600
self.init = 1
no_sys_menu = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.CAPTION | wx.CLIP_CHILDREN | wx.CLOSE_BOX
wx.Frame.__init__(self, None, title=_("Title"), style=no_sys_menu)
self.SetSize(wx.Size(self.frameWidth, self.frameHeight))
self.SetBackgroundColour('white')
self.Centre()
treeBook = Treebook(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(treeBook, 1, wx.ALL | wx.EXPAND, 10)
self.SetSizer(sizer)
self.Show()
self.Layout()
def __new__(self, *args, **kwargs):
if self.instance is None:
self.instance = wx.Frame.__new__(self)
elif not self.instance:
self.instance = wx.Frame.__new__(self)
return self.instance
class Treebook(wx.Treebook):
def __init__(self, parent):
wx.Treebook.__init__(self, parent, wx.ID_ANY, style=wx.BK_DEFAULT)
self.AddPage(MainPanel(self), _("AppTitle"))
self.AddSubPage(MenuPanel(self), _("SubNodeTitle1"))
self.ExpandNode(0)
class MainPanel(wx.Panel): # This Panel is OK
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
self.font1 = wx.Font(18, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
self.font2 = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
self.SetBackgroundColour("white")
pngIcon = wx.Image("foo.ico", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
icon = wx.StaticBitmap(self, -1, pngIcon, pos=(25, 15), size=(pngIcon.GetWidth(), pngIcon.GetHeight()))
titleHelp = wx.StaticText(self, -1, _("HelpTitle"))
titleHelp.SetFont(self.font1)
titleApp = wx.StaticText(self, -1, _("AppTitle"), pos=(25, 85))
titleApp.SetFont(self.font1)
description = wx.StaticText(self, -1, _("App description."), pos=(25, 170))
description.SetFont(self.font2)
features = wx.StaticText(self, -1, _("App features."), pos=(25, 210))
features.SetFont(self.font2)
pngLogo = wx.Image("foo.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
logo = wx.StaticBitmap(self, -1, pngLogo, pos=(25, 390), size=(pngLogo.GetWidth(), pngLogo.GetHeight()))
sliLine = wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL)
sliLine.SetSize(wx.Size(625, 1))
steCopy = wx.StaticText(self, -1, _("Copyright text."))
steCopy.SetFont(self.font2)
heigthSpacer = 20
hSizer = wx.BoxSizer(wx.HORIZONTAL)
hSizer.Add(icon, 0, wx.LEFT, 0)
hSizer.Add(titleHelp, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 10)
vSizer = wx.BoxSizer(wx.VERTICAL)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(hSizer, 0, wx.LEFT, 10)
vSizer.AddSpacer(heigthSpacer + 10)
vSizer.Add(titleApp, 0, wx.LEFT, 15)
vSizer.AddSpacer(10)
vSizer.Add(description, 0, wx.LEFT, 15)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(features, 0, wx.LEFT, 15)
vSizer.AddSpacer(115)
vSizer.Add(logo, 0, wx.LEFT, 15)
vSizer.Add(sliLine, 0, wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, 15)
vSizer.Add(steCopy, 0, wx.LEFT | wx.RIGHT | wx.ALIGN_RIGHT, 15)
self.SetSizer(vSizer)
class MenuPanel(scrolled.ScrolledPanel): # This panel does not fit content within the size of the Treebook panel
def __init__(self, parent):
scrolled.ScrolledPanel.__init__(self, parent, -1)
self.SetBackgroundColour("white")
self.font1 = wx.Font(18, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
self.font2 = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
self.font3 = wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)
strTitlePage = wx.StaticText(self, -1, _("TitlePanel"))
strTitlePage.SetFont(self.font1)
strIntroPage = wx.StaticText(self, -1, _("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."))
strIntroPage.SetFont(self.font2)
png = wx.Image("foo.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
bitmap1 = wx.StaticBitmap(self, -1, png, pos=(240, 100), size=(png.GetWidth(), png.GetHeight()))
steMainTitle = wx.StaticText(self, -1, _("MainMenu"))
steMainTitle.SetFont(self.font3)
steMainMenu = wx.StaticText(self, -1, _("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."))
steMainMenu.SetFont(self.font2)
png = wx.Image("foo.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
bitmap2 = wx.StaticBitmap(self, -1, png, pos=(240, 100), size=(png.GetWidth(), png.GetHeight()))
steLangTitle = wx.StaticText(self, -1, _("Config Menu"))
steLangTitle.SetFont(self.font3)
steLangMenu = wx.StaticText(self, -1, _("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."))
steLangMenu.SetFont(self.font2)
png = wx.Image("foo.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
bitmap3 = wx.StaticBitmap(self, -1, png, pos=(240, 100), size=(png.GetWidth(), png.GetHeight()))
stePortMenu = wx.StaticText(self, -1, _("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."))
stePortMenu.SetFont(self.font2)
png = wx.Image("foo.png", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
bitmap4 = wx.StaticBitmap(self, -1, png, pos=(240, 100), size=(png.GetWidth(), png.GetHeight()))
steHelpTitle = wx.StaticText(self, -1, _("Menu Help"))
steHelpTitle.SetFont(self.font3)
steHelpMenu = wx.StaticText(self, -1, _("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."))
steHelpMenu.SetFont(self.font2)
sliLine = wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL)
steCopy = wx.StaticText(self, -1, _("Copyright text."))
steCopy.SetFont(self.font2)
heigthSpacer = 20
vSizer = wx.BoxSizer(wx.VERTICAL)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(strTitlePage, 0, wx.ALL, 5)
vSizer.Add(strIntroPage, 0, wx.EXPAND, 5)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(steMainTitle, 0, wx.ALL, 5)
vSizer.Add(bitmap1, 0, wx.ALIGN_CENTRE_HORIZONTAL, 5)
vSizer.Add(steMainMenu, 0, wx.EXPAND, 5)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(steLangTitle, 0, wx.ALL, 5)
vSizer.Add(bitmap2, 0, wx.ALIGN_CENTRE_HORIZONTAL, 5)
vSizer.Add(steLangMenu, 0, wx.EXPAND, 5)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(bitmap3, 0, wx.ALIGN_CENTRE_HORIZONTAL, 5)
vSizer.Add(stePortMenu, 0, wx.EXPAND, 5)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(steHelpTitle, 0, wx.ALL, 5)
vSizer.Add(bitmap4, 0, wx.ALIGN_CENTRE_HORIZONTAL, 5)
vSizer.Add(steHelpMenu, 0, wx.EXPAND, 5)
vSizer.AddSpacer(heigthSpacer)
vSizer.Add(sliLine, 0, wx.ALL | wx.EXPAND, 5)
vSizer.Add(steCopy, 0, wx.ALIGN_RIGHT, 5)
self.SetSizer(vSizer)
self.Layout()
self.SetAutoLayout(1)
self.SetupScrolling()
def main():
app = wx.App(False)
main = MyMainView(app)
app.MainLoop()
if __name__ == '__main__':
main()
내가 원하는 것은 트리에서 항목을 클릭하고 내 창 (statictexts, staticlines)의 크기에 따라 크기가 조정되는 내용으로 패널 옆에 열 수 있습니다.
잘 설명 할 수 있을지 모르겠으니 궁금한 점이 있습니다.
모두에게 도움과 관심을 가져 주셔서 감사합니다.
코드 샘플을 붙여넣고 실행할 수 있다면 ... –
내 오류 @PetrBlahos를 용서하십시오. 코드를 조정했는데 이제는 기능적입니다. 도와 줘서 고마워! – msribeir