精英干员瑕光 2023-08-23 13:59 采纳率: 76.5%
浏览 3
已结题

wx.ScrolledWindow没有滚动条

以下是代码,界面通过布局分为self.panelhead 和self.panelbody两个panel,self.panelbody又分为panel1和滚动画布panel22,希望点击按钮时从panel1切换到panel22,但是现在发现panel22没有滚动条。
请问如何修改可以让panel22的尺寸充满body并且内容超出尺寸时有滚动条

class exam(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, '基础测试',
                          style=wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX | wx.SYSTEM_MENU
                          )
        #box>panel>box
        self.panelhead=wx.Panel(self,size=(817, 73))
        self.panelbody = wx.Panel(self,size=(817, 600))

        self.Init_head()
        self.Init_Body()

        vbox0 = wx.BoxSizer(wx.VERTICAL)
        self.Bind(wx.EVT_CLOSE, self.Onclose)
        self.panelhead.Fit()
        self.panelbody.Fit()
        vbox0.Add(self.panelhead, proportion=1, border=2, flag=wx.ALL | wx.EXPAND)
        vbox0.Add(self.panelbody, proportion=8, border=2, flag=wx.ALL | wx.EXPAND)

        self.SetSizer(vbox0)
        self.Fit()

        self.Show()

        print(1,self.panelhead.GetSize())
        print(2,self.panelbody.GetSize())
    def Init_head(self):
        self.vbox = wx.BoxSizer(wx.VERTICAL)
        self.vbox.Add(wx.StaticText(self.panelhead,-1,'员工培训'),0, wx.ALL | wx.CENTER, 5)

        box1 = wx.BoxSizer(wx.HORIZONTAL)
        box1.Add(wx.StaticText(self.panelhead,-1,'Name'),1,wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.StaticText(self.panelhead, -1, os.getlogin()), 0, wx.ALL | wx.EXPAND, 5)
        box1.AddStretchSpacer(1)
        box1.Add(wx.StaticText(self.panelhead, -1, '题目数量/完成数量'), 0, wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.StaticText(self.panelhead, -1, '0/10'), 1, wx.ALL | wx.EXPAND, 5)
        box1.AddStretchSpacer(1)
        box1.Add(wx.StaticText(self.panelhead, -1, '完成时间'), 0, wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.StaticText(self.panelhead, -1, '60'), .5, wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.StaticText(self.panelhead, -1, 'min'), .5, wx.ALL | wx.EXPAND, 5)
        box1.AddStretchSpacer(2)
        self.btn1=wx.Button(self.panelhead, -1, '开始')
        box1.Add(self.btn1, 0, wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.Button(self.panelhead, -1, '提交'), 0, wx.ALL | wx.EXPAND, 5)
        box1.Add(wx.Button(self.panelhead, -1, '提交'), 0, wx.ALL | wx.EXPAND, 5)
        self.vbox.Add(box1, 0, wx.ALL | wx.CENTER, 5)
        self.panelhead.SetSizer(self.vbox)

        self.btn1.Bind(wx.EVT_BUTTON,self.start)
    def Init_Body(self):

        self.panelbody1 = wx.Panel(self.panelbody)    #设置俩panel,一显示一隐藏

        self.panelbody22 = wx.ScrolledWindow(self.panelbody)
        self.panelbody22.SetScrollbars(1, 1, 200, 100)  # 是否横向|竖向滚动条,小于该长度时出现滚动条
        self.panelbody22.SetScrollRate(10, 20)  # 滚动速度

        self.panelbody1.Show(True)
        self.panelbody22.Show(False)

        vbox = wx.BoxSizer(wx.VERTICAL)
        a='''   考试準備及介紹:\n
          1.考试时间60Min,超时自动提交\n
          2.提交後,培訓者需自行對主觀題(填空、文字應用題、實操題)進行評分後,再對測試人進行反饋,查缺補漏\n'''
        vbox.Add(wx.StaticText(self.panelbody1, -1, a,style=wx.TE_READONLY | wx.TE_MULTILINE),0, wx.ALL | wx.EXPAND, 5)

        self.panelbody1.SetSizer(vbox)
        self.panelbody1.Fit()
        self.Initpanel2()

    # 问卷界面
    def Initpanel2(self):

        vbox = wx.BoxSizer(wx.VERTICAL)
        a = '1.请问xxx是xxx吗?()'
        for i in range(20):
            vbox.Add(wx.StaticText(self.panelbody22, -1, a, style=wx.TE_READONLY ), 0, wx.LEFT |wx.TOP | wx.EXPAND,5)
            vbox.Add(wx.RadioBox(self.panelbody22, choices=['2    ','5    ','6    ','d         '],majorDimension=0, style=wx.RA_SPECIFY_COLS), 0, wx.ALL | wx.EXPAND,0)
        #majorDimension每行最大选项数

        self.panelbody22.SetSizerAndFit(vbox)
        self.panelbody22.Fit()
        self.panelbody22.FitInside()
        self.panelbody22.Layout()

    def Onclose(self, event):
        wx.Exit()
        print('end')


    def start(self,event):
        btn = event.GetEventObject()
        btn.Disable()
        self.panelbody1.Show(False)
        self.panelbody22.Show(True)

  • 写回答

2条回答 默认 最新

  • 精英干员瑕光 2023-10-06 09:17
    关注

    使用以下代碼調試后發現是面板的大小不一致,某個面板超寬了,使用size直接定死解決問題,但依然不理解爲什麽Fit自適應失敗

            app = wx.App()  # 创建应用程序对象
            login = exam()
            # import wx.lib.inspection
            # wx.lib.inspection.InspectionTool().Show()
            app.MainLoop()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 8月23日

悬赏问题

  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题:
  • ¥100 C# 做 10个串口数据采集;采集数据填到 EXE表中;1路与PLC MODBUS通讯 ;要求速度尽量快点; 有能做完整程序的单聊,重酬
  • ¥15 P0口接8个LED,编写程序,并绘制proteus仿真电路原理图
  • ¥15 java,maven
  • ¥15 单独编译安卓13车载evs
  • ¥20 完成实验一,要求按照图片要求,实验报告一定要按照要求,并且回答简答题,截止日期明天中午12:00
  • ¥30 孪生网络模型,当训练集与测试集共用一个数据集时,训练准确率为100%,而测试准确率仍在50%左右浮动(正常来说测试的都是学习过的数据,准确率应为100%)。【不要GPT及任何大模型回答】