gpt4 book ai didi

gtk - Gtk.Table 和 Gtk.Grid 的区别

转载 作者:行者123 更新时间:2023-12-02 17:30:05 27 4
gpt4 key购买 nike

虽然 Gtk.table 已被弃用,但我用它获得了更好的结果,而不是推荐的 Gtk.Grid。

这可能是我的错误,但我找不到问题。

我的目标是创建一个 Gtk 窗口,顶部有一个笔记本,下面有两个按钮。这些按钮应水平对齐。

我的表格代码,按预期工作:

uses Gtk

class TestWindow : Window
init
// General characteristics of the window
title = "Gtk Containers"
default_height = 250
default_width = 250
window_position = WindowPosition.CENTER
destroy.connect(Gtk.main_quit)

// Now building the notebook
var notebook = new Gtk.Notebook()
var label1 = new Gtk.Label("Page one")
var label2 = new Gtk.Label("Page two")
var child1 = new Gtk.Label("Go to page 2 for the answer")
var child2 = new Gtk.Label("Go to page 1 for the answer")
notebook.append_page(child1, label1)
notebook.append_page(child2, label2)

// Now building the table
var table = new Table(2,2,true)
var button1 = new Gtk.Button.with_mnemonic("Button_1")
var button2 = new Button.with_mnemonic("Button_2")

// Attaching all elements into the table
table.attach_defaults(notebook, 0,2,0,1)
table.attach_defaults(button1, 0,1,1,2)
table.attach_defaults(button2, 1,2,1,2)
add(table)

init
Gtk.init (ref args)
var test = new TestWindow ()
test.show_all ()
Gtk.main ()

但是,与推荐的 Gtk.Grid 相同的代码为我提供了两个没有笔记本的按钮:

uses Gtk

class TestWindow : Window
init
// General characteristics of the window
title = "Gtk Containers"
default_height = 250
default_width = 250
window_position = WindowPosition.CENTER
destroy.connect(Gtk.main_quit)

// Now building the notebook
var notebook = new Gtk.Notebook()
var label1 = new Gtk.Label("Page one")
var label2 = new Gtk.Label("Page two")
var child1 = new Gtk.Label("Go to page 2 for the answer")
var child2 = new Gtk.Label("Go to page 1 for the answer")
notebook.append_page(child1, label1)
notebook.append_page(child2, label2)

// Now building the grid
var grid = new Grid()
var button1 = new Gtk.Button.with_mnemonic("Button_1")
var button2 = new Button.with_mnemonic("Button_2")

// Attaching all elements into the grid
grid.attach(notebook, 0,2,0,1)
grid.attach(button1, 0,1,1,2)
grid.attach(button2, 1,2,1,2)

init
Gtk.init (ref args)
var test = new TestWindow ()
test.show_all ()
Gtk.main ()

如何用Grid代替Tables达到目的?不要求代码,只要求一个指针。

最佳答案

gtk_table_attach_defaults()gtk_grid_attach() 的操作方式不同。 official documentation in C指出这一点。

给定

        thing.attach(widget, a,b,c,d)

对于 GtkTable,四个数字 abcd 是实际的列并且小部件的给定边缘应占据的行号。 a 是左边缘,b 是右边缘,c 是上边缘,d 是底边。

对于GtkGrid,a是列,b是widget左上角应该占据的行,c是小部件的列数,d 是小部件的行数。

或者换句话说,

        table.attach_defaults(widget, left, right, top, bottom)

相同
        grid.attach(widget, left, top,
right - left + 1, bottom - top + 1)

希望该解释的某些部分可以澄清问题。

您的代码的快速修复是

        grid.attach(notebook, 0,0,2,1)
grid.attach(button1, 0,1,1,1)
grid.attach(button2, 1,1,1,1)

关于gtk - Gtk.Table 和 Gtk.Grid 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com