首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wx.Grid和ScrolledWindows

wx.Grid和ScrolledWindows
EN

Stack Overflow用户
提问于 2018-06-28 03:21:41
回答 1查看 192关注 0票数 1

我正在创建一个WX小部件应用程序,通过wx.grid显示大量数据。

我实际上使用的是WX.Go。

无论我做什么,网格都不会在滚动窗口内,网格甚至会越过状态栏。

我所要做的就是让Grid显示在一个可滚动的窗口/面板中。

代码语言:javascript
复制
w := ControlWindow{}
    w.Frame = wx.NewFrame(wx.NullWindow, -1, "FooBar", wx.DefaultPosition, wx.NewSizeT(600, 400))
    w.statusbar = w.CreateStatusBar()
    w.statusbar.SetStatusText("Welcome to FooBar")
    w.SetBackgroundColour(wx.GetBLACK())
    scroller := wx.NewScrolledWindow(w, wx.ID_ANY)
    scroller.SetScrollbar(wx.VERTICAL, 1, 1, 1)
    scroller.SetBackgroundColour(wx.GetGREEN())
    w.menubar = wx.NewMenuBar()
    menuFile := wx.NewMenu()
    menuFile.Append(wx.ID_EXIT)
    wx.Bind(w, wx.EVT_MENU, func(e wx.Event) {
        w.Close(true)
    }, wx.ID_EXIT)
    w.menubar.Append(menuFile, "&File")
    w.SetMenuBar(w.menubar)
    vSizer := wx.NewBoxSizer(wx.VERTICAL)



    /*add system choices */
    filesFolder := strings.Join([]string{ThisFolder, "systems"}, Slash)
    err := filepath.Walk(filesFolder, func(path string, info os.FileInfo, err error) error {
        SystemFiles = append(SystemFiles, path)
        return nil
    })
    if err != nil {
        checkErr(err)
    }

    for _, file := range SystemFiles {
        if !FileExists(file) {
            continue
        }

        xmlFile, err := os.Open(file)
        checkErr(err)
        decoder := xml.NewDecoder(xmlFile)
...loop through to create SystemsAutoComplete = append(SystemsAutoComplete, attribute.Value) which is a []string

sort.Strings(SystemsAutoComplete)
    systemsGrid := wx.NewGrid(w, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize)
    systemsGrid.CreateGrid(0, 3)
    for _, stemp := range SystemsAutoComplete {

        systemsGrid.AppendRows(1)
        renderer := wx.NewGridCellBoolRenderer()
        systemsGrid.SetCellRenderer(systemsGrid.GetNumberRows()-1, 0, renderer)
        editor := wx.NewGridCellBoolEditor()
        systemsGrid.SetCellEditor(systemsGrid.GetNumberRows()-1, 0, editor)
        systemsGrid.SetCellValue(systemsGrid.GetNumberRows()-1, 2, stemp)
        systemsGrid.SetReadOnly(systemsGrid.GetNumberRows()-1, 2, true)
        systemsGrid.AutoSizeColumns(true)
}
vSizer.Add(systemsGrid,1,wx.EXPAND,5)
    scroller.SetSizer(vSizer)
    scroller.FitInside()
    return w

我已经尽可能地简化了代码。我还是得到了同样的结果。

代码语言:javascript
复制
package main

import (
    "github.com/dontpanic92/wxGo/wx"
)

type ControlWindow struct {
    wx.Frame
    statusbar  wx.StatusBar
    toolbar    wx.ToolBar
    menubar    wx.MenuBar
    auiManager wx.AuiManager
}

func main() {
    wx1 := wx.NewApp()
    w := ControlWindow{}
    w.Frame = wx.NewFrame(wx.NullWindow, -1, "FooBar", wx.DefaultPosition, wx.NewSizeT(600, 400))
    w.SetBackgroundColour(wx.GetBLACK())
    scroller := wx.NewScrolledWindow(w, wx.ID_ANY)
    scroller.SetScrollbar(wx.VERTICAL, 1, 1, 1)
    scroller.SetBackgroundColour(wx.GetGREEN())
    vSizer := wx.NewBoxSizer(wx.VERTICAL)
    grid := wx.NewGrid(scroller, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize)
    grid.CreateGrid(60, 1)
    vSizer.Add(grid, 1, wx.EXPAND, 5)
    scroller.SetSizer(vSizer)
    scroller.SetAutoLayout(true)
    scroller.Layout()
    scroller.Fit()
    scroller.SetScrollbar(0, 16, 50, 15)
    w.Show()
    wx1.MainLoop()
    w.Destroy()
    return
}

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 05:33:50

我真的不会读Go,但如果我理解正确的话,你有一些基本的缺陷:

  • 父子关系看起来是错误的:如果您想要将systemsGrid添加到将设置为scroller的sizer中,那么systemsGrid必须将scroller作为父对象。是吗?
  • gridscrollersystemsGrid都有相同的父级吗?因为如果它们这样做了,即使在您将其更改为systemsGrid之后,您仍然需要对剩下的两个做些什么:移除显然无用的grid,或者将它们都放在一个大小中,您需要将它们设置为它们的父级或手动处理它们的位置(这是所有操作中最不明智的做法)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51070026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档