如何在IUP中更新窗口显示后的布局?
问题:IUP-Go窗口显示后无法更新布局
我搞不懂窗口显示后该怎么更新布局,肯定漏了关键操作!以下是简化后的测试代码:切换到第二个标签页,点击toggle按钮,本应在第一个标签页中添加(随后移除)一行数据。selectedMarkets的值已经成功变更,但重建后的布局完全没显示出变化。
package main import ( "slices" "github.com/gen2brain/iup-go/iup" ) type marketControls struct { mCVal string } var ( selectedMarkets = make(map[string]marketControls) dlg iup.Ihandle marketValuesHandle iup.Ihandle ) func main() { // Test value to show it is added to layout mC := new(marketControls) mC.mCVal = "woo" selectedMarkets["01"] = *mC iup.Open() defer iup.Close() marketValuesHandle = buildMarketPanel() dlg = iup.Dialog( iup.Hbox( iup.Tabs( marketValuesHandle, buildSelectionPanel(), ).SetAttributes("TABTITLE0=\"Market Values\",TABTITLE1=\"Market Selections\",MINSIZE=338x, MAXSIZE=340x"), ), ).SetAttributes("MARGIN=10x10") setSelectionsCallbacks() iup.Show(dlg) iup.MainLoop() } func buildMarketPanel() iup.Ihandle { gb := iup.GridBox().SetAttributes(map[string]string{ "NUMDIV": "2", "NORMALIZESIZE": "BOTH", "ORIENTATION": "HORIZONTAL", "ALIGNMENTCOL": "ACENTER", "MARGIN": "10x10", "GAPLIN": "20", "GAPCOL": "10", }) gb = fillMarketPanel(gb) return gb } func fillMarketPanel(gb iup.Ihandle) iup.Ihandle { gb = iup.Append(gb, iup.Label("Market").SetAttributes("FONTSTYLE=Bold")) gb = iup.Append(gb, iup.Label("Value").SetAttributes("FONTSTYLE=Bold")) var mCKeys []string for key := range selectedMarkets { mCKeys = append(mCKeys, key) } slices.Sort(mCKeys) for _, key := range mCKeys { gb = iup.Append(gb, iup.Label(key)) marketVal := selectedMarkets[key].mCVal gb = iup.Append(gb, iup.Label(marketVal)) } return gb } func buildSelectionPanel() iup.Ihandle { gb := iup.GridBox( iup.Label("Selections").SetAttributes("FONTSTYLE=Bold"), iup.Toggle(" Sel 00").SetHandle("sp00"), ).SetAttributes(map[string]string{ "NUMDIV": "1", "HOMOGENEOUSCOL": "Yes", "NORMALIZESIZE": "BOTH", "ORIENTATION": "HORIZONTAL", "ALIGNMENTLIN": "ACENTER", "ALIGNMENTCOL": "ACENTER", "MARGIN": "10x10", "GAPLIN": "10", "GAPCOL": "10", }) return gb } func setSelectionsCallbacks() { iup.SetCallback(iup.GetHandle("sp00"), "VALUECHANGED_CB", iup.ValueChangedFunc(changedSelection)) } func changedSelection(ih iup.Ihandle) int { offOn := ih.GetAttribute("VALUE") if offOn == "ON" { mC := new(marketControls) mC.mCVal = "" selectedMarkets["00"] = *mC } else { delete(selectedMarkets, "00") } marketValuesHandle = buildMarketPanel() // Tried each of these iup.Redraw(marketValuesHandle, 1) iup.Update(marketValuesHandle) iup.Redraw(dlg, 1) iup.Update(dlg) return iup.DEFAULT }
解决方案
在Antonio的建议下,我找到了修复方法,完整代码如下:
package main import ( "slices" "github.com/gen2brain/iup-go/iup" ) type marketControls struct { mCVal string } var ( selectedMarkets = make(map[string]marketControls) tabsHandle iup.Ihandle marketValuesHandle iup.Ihandle marketSelectionsHandle iup.Ihandle ) func main() { // Test value to show it is added to layout mC := new(marketControls) mC.mCVal = "woo" selectedMarkets["01"] = *mC iup.Open() defer iup.Close() tabsHandle = iup.Tabs().SetAttributes("TABTITLE0=\"Market Values\",TABTITLE1=\"Market Selections\",MINSIZE=338x, MAXSIZE=340x") marketValuesHandle = buildMarketPanel() marketSelectionsHandle = buildSelectionPanel() tabsHandle = iup.Append(tabsHandle, marketValuesHandle) tabsHandle = iup.Append(tabsHandle, marketSelectionsHandle) dlg := iup.Dialog( iup.Hbox( tabsHandle, ), ).SetAttributes("MARGIN=10x10") setSelectionsCallbacks() iup.Show(dlg) iup.MainLoop() } func buildMarketPanel() iup.Ihandle { gb := iup.GridBox().SetAttributes(map[string]string{ "NUMDIV": "2", "NORMALIZESIZE": "BOTH", "ORIENTATION": "HORIZONTAL", "ALIGNMENTCOL": "ACENTER", "MARGIN": "10x10", "GAPLIN": "20", "GAPCOL": "10", }) gb = fillMarketPanel(gb) return gb } func fillMarketPanel(gb iup.Ihandle) iup.Ihandle { gb = iup.Append(gb, iup.Label("Market").SetAttributes("FONTSTYLE=Bold")) gb = iup.Append(gb, iup.Label("Value").SetAttributes("FONTSTYLE=Bold")) var mCKeys []string for key := range selectedMarkets { mCKeys = append(mCKeys, key) } slices.Sort(mCKeys) for _, key := range mCKeys { gb = iup.Append(gb, iup.Label(key)) marketVal := selectedMarkets[key].mCVal gb = iup.Append(gb, iup.Label(marketVal)) } return gb } func buildSelectionPanel() iup.Ihandle { gb := iup.GridBox( iup.Label("Selections").SetAttributes("FONTSTYLE=Bold"), iup.Toggle(" Sel 00").SetHandle("sp00"), ).SetAttributes(map[string]string{ "NUMDIV": "1", "HOMOGENEOUSCOL": "Yes", "NORMALIZESIZE": "BOTH", "ORIENTATION": "HORIZONTAL", "ALIGNMENTLIN": "ACENTER", "ALIGNMENTCOL": "ACENTER", "MARGIN": "10x10", "GAPLIN": "10", "GAPCOL": "10", }) return gb } func setSelectionsCallbacks() { iup.SetCallback(iup.GetHandle("sp00"), "VALUECHANGED_CB", iup.ValueChangedFunc(changedSelection)) } func changedSelection(ih iup.Ihandle) int { offOn := ih.GetAttribute("VALUE") if offOn == "ON" { mC := new(marketControls) mC.mCVal = "" selectedMarkets["00"] = *mC } else { delete(selectedMarkets, "00") } iup.Unmap(marketValuesHandle) iup.Detach(marketValuesHandle) marketValuesHandle = buildMarketPanel() tabsHandle = iup.Insert(tabsHandle, marketSelectionsHandle, marketValuesHandle).SetAttributes("TABTITLE0=\"Market Values\",MINSIZE=338x, MAXSIZE=340x") iup.Map(marketValuesHandle) iup.Refresh(tabsHandle) return iup.DEFAULT }
内容的提问来源于stack exchange,提问作者shakeshuck
相关产品推荐
相关产品推荐

