【问题标题】:Objects which needs to be scrolled down to see are not visible需要向下滚动才能看到的对象不可见
【发布时间】:2015-11-23 11:24:48
【问题描述】:

我正在使用 wxpython 来编写这个简单的表单。我使用的是带有滚动条和少量文本控件的笔记本。我可以看到在屏幕上可以查看的小部件,但需要向下滚动的小部件不可见。在下面的代码中,我可以看到“输入日志”和该字段的相应文本控件,但是“审核字段以及提交和取消按钮都丢失了。

import wx

将 wx.lib.filebrowsebutton 导入为文件浏览

类框架(wx.Frame):

def __init__( self, parent ):
    wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Test", pos = wx.DefaultPosition, size = wx.Size( 600,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

    self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
    sizer = wx.BoxSizer( wx.VERTICAL )

    self.notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
    self.login = wx.Panel( self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
    self.notebook.AddPage( self.login, u"Login", False )
    self.scroll = wx.ScrolledWindow( self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL )
    vbox = wx.BoxSizer(wx.VERTICAL)

    # Sizer for widgets inside tabs
    inside_sizer_h1 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h2 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h3 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h4 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h5 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h6 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h7 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h8 = wx.BoxSizer(wx.HORIZONTAL)
    inside_sizer_h9 = wx.BoxSizer(wx.HORIZONTAL)

    #Test Approve Label
    self.test_app_label = wx.StaticText(self.scroll, -1 , label="Test Approved By :")
    inside_sizer_h1.Add(self.test_app_label, 1,  wx.ALL,5)

    #Test Approve Combo   
    self.tes_app_combo = wx.ComboBox(self.scroll, -1, value='None', choices= ['None', 'approver1', 'approver2', 'approver3', 'approver4'] )
    inside_sizer_h1.Add(self.tes_app_combo, 1, wx.ALL, 5 )


    #Workspace Label
    self.wrksp_label =  wx.StaticText(self.scroll, -1 , label="Workspace :")
    inside_sizer_h2.Add(self.wrksp_label, 1,  wx.ALL,5)

    #Workspace file selector
    self.select_wrksp_dir = filebrowse.DirBrowseButton(self.scroll, -1,labelText = "", toolTip = 'Select tip of your workspace')
    inside_sizer_h2.Add(self.select_wrksp_dir,  1, wx.ALL|wx.EXPAND, 5 )

    # Issuelist label
    self.ar_list_label = wx.StaticText(self.scroll, -1 , label="Issue List :")
    inside_sizer_h3.Add(self.ar_list_label, 1,  wx.ALL,5)

    # Issue Text box
    self.ar_list_text =  wx.TextCtrl(self.scroll, -1, value=u"Enter The issue, one per line", style=wx.TE_MULTILINE)
    inside_sizer_h3.Add(self.ar_list_text,  1, wx.ALL, 5 )

    # Summary of change Title
    self.change_summary_label = wx.StaticText(self.scroll, -1 , label=u"Summary of change :")
    inside_sizer_h4.Add(self.change_summary_label, 1,  wx.ALL, 5)

    # Summary of change Text Box
    self.change_summary_text =  wx.TextCtrl(self.scroll, -1, value=u"What componet has changed?",style=wx.TE_MULTILINE)
    inside_sizer_h4.Add(self.change_summary_text,  1, wx.ALL, 5 )

    # Changed File List Title
    self.change_file_list_label = wx.StaticText(self.scroll, -1 , label=u"Changed File List :")
    inside_sizer_h5.Add(self.change_file_list_label,1,  wx.ALL, 5)

    # Changed File List Box
    self.change_summary_text =  wx.TextCtrl(self.scroll, -1, u' enter list of changed files',style=wx.TE_MULTILINE)
    inside_sizer_h5.Add(self.change_summary_text,1,  wx.ALL, 5)

    # GUI Testing done label
    self.testing_done_label = wx.StaticText(self.scroll, -1 , label=u"What tests have you done? :")
    inside_sizer_h6.Add(self.testing_done_label,1,  wx.ALL, 5)

    #FlexGUi Checkbox
    self.gui_check_list = wx.CheckListBox(self.scroll, -1, choices=['GUI Builds Successfully', 'GUI Automation Tests', 'CLI Automation Tests'])
    inside_sizer_h6.Add(self.gui_check_list,1,  wx.ALL, 5)

    # GUI Automation test logs label
    self.gui_auto_log_label = wx.StaticText(self.scroll, -1 , label=u"Enter the logs :")
    inside_sizer_h7.Add(self.gui_auto_log_label,1,  wx.ALL, 5)

    #GUI Automation test box
    self.gui_auto_log = wx.TextCtrl(self.scroll, -1, u'Copy and paste the logs.',style=wx.TE_MULTILINE)
    inside_sizer_h7.Add(self.gui_auto_log,1,  wx.ALL, 5)

    # Review URL Text
    self.review_url_label = wx.StaticText(self.scroll, -1 , label=u"Code review URL :")
    inside_sizer_h8.Add(self.review_url_label,1,  wx.ALL, 5)

    #Code Review Textbox
    self.review_url_tbox =  wx.TextCtrl(self.scroll, -1, value=u"Enter the code review URL",style=wx.TE_MULTILINE)
    inside_sizer_h8.Add(self.review_url_tbox,1,  wx.ALL, 5)

    #Submit button
    self.sub_button = wx.Button(self.scroll, label = 'Submit')
    inside_sizer_h9.Add(self.sub_button, wx.ALL, 5)

    #Cancel button
    self.canc_button = wx.Button(self.scroll, label = 'Cancel')
    inside_sizer_h9.Add(self.canc_button,1,  wx.ALL, 5)


    vbox.Add(inside_sizer_h1, 0 , wx.TOP|wx.EXPAND, 40 )
    vbox.Add(inside_sizer_h2, 0 , wx.ALL|wx.EXPAND, 5 )
    vbox.Add(inside_sizer_h3, 0 , wx.ALL|wx.EXPAND, 5 )
    vbox.Add(inside_sizer_h4, 0 , wx.ALL|wx.EXPAND, 10)
    vbox.Add(inside_sizer_h5, 0 , wx.ALL|wx.EXPAND, 10)
    vbox.Add(inside_sizer_h6, 0 , wx.ALL|wx.EXPAND, 10)
    vbox.Add(inside_sizer_h7, 0 , wx.ALL|wx.EXPAND, 10)
    vbox.Add(inside_sizer_h8, 0 , wx.ALL|wx.EXPAND, 10)
    vbox.Add(inside_sizer_h9, 0 , wx.ALL|wx.EXPAND, 10)

    self.Maximize()
    self.scroll.Size = self.GetSize()
    print self.GetSize()
    self.scroll.SetScrollbars(20,25,45,50)
    self.SetSizer( vbox )
    self.SetSizerAndFit(vbox)
    self.Layout()

    self.notebook.AddPage( self.scroll, u"Delivery", True )

    sizer.Add( self.notebook, 1, wx.EXPAND |wx.ALIGN_RIGHT|wx.ALL, 0 )

    self.SetSizer( sizer )
    self.Layout()

    self.Centre( wx.BOTH )
    self.Show()

如果 name == "ma​​in": 应用程序 = wx.App() 框架(无) app.MainLoop()

【问题讨论】:

  • 欢迎来到 SO。尝试将问题中的代码减少到重现问题所需的最低限度。此外,请确保其格式清晰。现在你有一个非常“泄漏”的代码块。
  • 你搞定了吗?

标签: python wxpython wxwidgets


【解决方案1】:

将您的项目添加到 sizer 时,您始终将比例值设置为 1,但 self.sub_button 除外。这是导致您的问题的原因。

inside_sizer_h9.Add(self.sub_button, wx.ALL, 5)    

应改为:

inside_sizer_h9.Add(self.sub_button,1, wx.ALL, 5)

另请注意,发布的代码main 不正确,应为:

if __name__ == "__main__":   

通过这些修改,您的代码应该可以按照您编写的方式工作。

【讨论】:

  • 感谢您的建议,但在我进行更改后,仍然无法查看以下对象:self.review_url_label、self.review_url_tbox、self.sub_button、self.canc_button。这些是需要滚动查看的对象,我想知道这是否是滚动条代码错误的情况。如果我从顶部删除几个对象并插入上述 4 个字段,它们是可见的。所以他们的代码似乎没问题。无需滚动即可放入页面的对象可见,而需要滚动的对象则不可见。
  • 很高兴听到您将其整理得足够可用。也许您在非 Linux 平台上运行,因为您的代码通过简单的调整对我来说是一种享受。
【解决方案2】:

您的代码(已修改)在 Linux 上运行:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
import wx.lib.filebrowsebutton as filebrowse
class Frame ( wx.Frame ):
    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Test", pos = wx.DefaultPosition, size = wx.Size( 600,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        sizer = wx.BoxSizer( wx.VERTICAL )

        self.notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
        self.login = wx.Panel( self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        self.notebook.AddPage( self.login, u"Login", False )
        self.scroll = wx.ScrolledWindow( self.notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL )
        vbox = wx.BoxSizer(wx.VERTICAL)

        # Sizer for widgets inside tabs
        inside_sizer_h1 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h2 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h3 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h4 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h5 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h6 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h7 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h8 = wx.BoxSizer(wx.HORIZONTAL)
        inside_sizer_h9 = wx.BoxSizer(wx.HORIZONTAL)

        #Test Approve Label
        self.test_app_label = wx.StaticText(self.scroll, -1 , label="Test Approved By :")
        inside_sizer_h1.Add(self.test_app_label, 1,  wx.ALL,5)

        #Test Approve Combo   
        self.tes_app_combo = wx.ComboBox(self.scroll, -1, value='None', choices= ['None', 'approver1', 'approver2', 'approver3', 'approver4'] )
        inside_sizer_h1.Add(self.tes_app_combo, 1, wx.ALL, 5 )


        #Workspace Label
        self.wrksp_label =  wx.StaticText(self.scroll, -1 , label="Workspace :")
        inside_sizer_h2.Add(self.wrksp_label, 1,  wx.ALL,5)

        #Workspace file selector
        self.select_wrksp_dir = filebrowse.DirBrowseButton(self.scroll, -1,labelText = "", toolTip = 'Select tip of your workspace')
        inside_sizer_h2.Add(self.select_wrksp_dir,  1, wx.ALL|wx.EXPAND, 5 )

        # Issuelist label
        self.ar_list_label = wx.StaticText(self.scroll, -1 , label="Issue List :")
        inside_sizer_h3.Add(self.ar_list_label, 1,  wx.ALL,5)

        # Issue Text box
        self.ar_list_text =  wx.TextCtrl(self.scroll, -1, value=u"Enter The issue, one per line", style=wx.TE_MULTILINE)
        inside_sizer_h3.Add(self.ar_list_text,  1, wx.ALL, 5 )

        # Summary of change Title
        self.change_summary_label = wx.StaticText(self.scroll, -1 , label=u"Summary of change :")
        inside_sizer_h4.Add(self.change_summary_label, 1,  wx.ALL, 5)

        # Summary of change Text Box
        self.change_summary_text =  wx.TextCtrl(self.scroll, -1, value=u"What componet has changed?",style=wx.TE_MULTILINE)
        inside_sizer_h4.Add(self.change_summary_text,  1, wx.ALL, 5 )

        # Changed File List Title
        self.change_file_list_label = wx.StaticText(self.scroll, -1 , label=u"Changed File List :")
        inside_sizer_h5.Add(self.change_file_list_label,1,  wx.ALL, 5)

        # Changed File List Box
        self.change_summary_text =  wx.TextCtrl(self.scroll, -1, u' enter list of changed files',style=wx.TE_MULTILINE)
        inside_sizer_h5.Add(self.change_summary_text,1,  wx.ALL, 5)

        # GUI Testing done label
        self.testing_done_label = wx.StaticText(self.scroll, -1 , label=u"What tests have you done? :")
        inside_sizer_h6.Add(self.testing_done_label,1,  wx.ALL, 5)

        #FlexGUi Checkbox
        self.gui_check_list = wx.CheckListBox(self.scroll, -1, choices=['GUI Builds Successfully', 'GUI Automation Tests', 'CLI Automation Tests'])
        inside_sizer_h6.Add(self.gui_check_list,1,  wx.ALL, 5)

        # GUI Automation test logs label
        self.gui_auto_log_label = wx.StaticText(self.scroll, -1 , label=u"Enter the logs :")
        inside_sizer_h7.Add(self.gui_auto_log_label,1,  wx.ALL, 5)

        #GUI Automation test box
        self.gui_auto_log = wx.TextCtrl(self.scroll, -1, u'Copy and paste the logs.',style=wx.TE_MULTILINE)
        inside_sizer_h7.Add(self.gui_auto_log,1,  wx.ALL, 5)

        # Review URL Text
        self.review_url_label = wx.StaticText(self.scroll, -1 , label=u"Code review URL :")
        inside_sizer_h8.Add(self.review_url_label,1,  wx.ALL, 5)

        #Code Review Textbox
        self.review_url_tbox =  wx.TextCtrl(self.scroll, -1, value=u"Enter the code review URL",style=wx.TE_MULTILINE)
        inside_sizer_h8.Add(self.review_url_tbox,1,  wx.ALL, 5)

        #Submit button
        self.sub_button = wx.Button(self.scroll, label = 'Submit')
        inside_sizer_h9.Add(self.sub_button,1, wx.ALL, 5)

        #Cancel button
        self.canc_button = wx.Button(self.scroll, label = 'Cancel')
        inside_sizer_h9.Add(self.canc_button,1,  wx.ALL, 5)


        vbox.Add(inside_sizer_h1, 0 , wx.TOP|wx.EXPAND, 40 )
        vbox.Add(inside_sizer_h2, 0 , wx.ALL|wx.EXPAND, 5 )
        vbox.Add(inside_sizer_h3, 0 , wx.ALL|wx.EXPAND, 5 )
        vbox.Add(inside_sizer_h4, 0 , wx.ALL|wx.EXPAND, 10)
        vbox.Add(inside_sizer_h5, 0 , wx.ALL|wx.EXPAND, 10)
        vbox.Add(inside_sizer_h6, 0 , wx.ALL|wx.EXPAND, 10)
        vbox.Add(inside_sizer_h7, 0 , wx.ALL|wx.EXPAND, 10)
        vbox.Add(inside_sizer_h8, 0 , wx.ALL|wx.EXPAND, 10)
        vbox.Add(inside_sizer_h9, 0 , wx.ALL|wx.EXPAND, 10)

        self.Maximize()
        self.scroll.Size = self.GetSize()
        print self.GetSize()
        self.scroll.SetScrollbars(20,25,45,50)
        self.SetSizer( vbox )
        self.SetSizerAndFit(vbox)
        self.Layout()

        self.notebook.AddPage( self.scroll, u"Delivery", True )

        sizer.Add( self.notebook, 1, wx.EXPAND |wx.ALIGN_RIGHT|wx.ALL, 0 )

        self.SetSizer( sizer )
        self.Layout()

        self.Centre( wx.BOTH )
        self.Show()

if __name__ == "__main__":
    app = wx.App()
    Frame(None)
    app.MainLoop()

【讨论】:

  • 哦,这只是部分好消息。如果你有 wx 设置,你能在 windows 上试试吗?不幸的是,我正试图让它在 Windows 上工作:(。知道什么可能导致它不能在 Windows 上显示所有对象吗?
  • 不,我没有窗户!
  • 我刚刚在 linux 中安装并尝试过,它确实有效。感谢您对此进行调查,我将提出一个单独的问题,说明它为什么不在 Windows 中显示。
  • 我遇到有人在 windows 上使用 canopy 作为他们的 IDE,但当从命令行运行时它可以工作。因此,如果您正在使用它,它可能是您的 IDE。您是否尝试过从 Windows 命令行运行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多