You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK3自定义组合框中网格首个按钮尺寸偏大问题求助

GTK3自定义组合框首个按钮高度异常问题

我用C语言开发GTK3自定义组合框,创建窗口后添加了网格,网格内是generic_button类型的按钮。所有按钮高度都设置为20像素,但网格中第一个按钮的高度始终约为25像素,不符合设置值,附上显示截图,求技术帮助。

相关结构体定义:

struct generic_button {
  int x;
  int y;
  int j_width;
  int j_height;
  const char *pc_name[6];
  GtkWidget *po_label;

  /* The following are set by init_button() */
  GdkPixbuf *po_pixbuf[6];
  GtkWidget *po_layout;
  GtkWidget *po_image;
  int j_state;
  int j_assignment;
};

初始化窗口和部件的函数:

void init_meas_assign_combobox() {

  // Create the window
  meas_assign_combo.po_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_decorated(GTK_WINDOW(meas_assign_combo.po_window), FALSE);
  gtk_window_set_type_hint(GTK_WINDOW(meas_assign_combo.po_window), GDK_WINDOW_TYPE_HINT_DIALOG);
  gtk_window_set_position(GTK_WINDOW(meas_assign_combo.po_window), GTK_WIN_POS_MOUSE);
  gtk_window_set_keep_above(GTK_WINDOW(meas_assign_combo.po_window), TRUE);
  gtk_widget_set_size_request(meas_assign_combo.po_window, COMBO_WIDTH, COMBO_HEIGHT);

  // Create the main layout
  meas_assign_combo.po_main_layout = gtk_layout_new(NULL, NULL);
  gtk_layout_set_size(GTK_LAYOUT(meas_assign_combo.po_main_layout), COMBO_WIDTH, COMBO_HEIGHT);
  gtk_widget_set_size_request(meas_assign_combo.po_main_layout, COMBO_WIDTH, COMBO_HEIGHT);
  gtk_container_add(GTK_CONTAINER(meas_assign_combo.po_window), meas_assign_combo.po_main_layout);

  // Create the grid
  meas_assign_combo.po_grid = gtk_grid_new();
  // gtk_grid_insert_row(GTK_GRID(meas_assign_combo.po_grid), NELEM(ac_meas_assignments));
  gtk_widget_set_size_request(GTK_WIDGET(meas_assign_combo.po_grid), COMBO_WIDTH, COMBO_HEIGHT);
  gtk_grid_set_row_spacing(GTK_GRID(meas_assign_combo.po_grid), 5);
  gtk_layout_put(GTK_LAYOUT(meas_assign_combo.po_main_layout), meas_assign_combo.po_grid, 0, 0);

  // initialize measurement option titles
  // initially I used i = 0, and this behaves the same way. I was
  // trying to see if there was a problem with inserting a 0 row. 
  // But the problem persists.
  for (int i = 1; i < NELEM(ac_meas_assignments)+1; i++) {
    gtk_grid_insert_row(GTK_GRID(meas_assign_combo.po_grid), i);
    init_button(&as_meas_assignments[i-1], "/recipe_panel"); // ((i*2)+1)
    gtk_grid_attach(GTK_GRID(meas_assign_combo.po_grid), as_meas_assignments[i-1].po_layout, 1, i, 1, 1);
    as_meas_assignments[i-1].po_label=gtk_label_new(ac_meas_assignments[i-1]);
    gtk_layout_put(GTK_LAYOUT(as_meas_assignments[i-1].po_layout), as_meas_assignments[i-1].po_label, 0, 5);
  }

  g_signal_connect(G_OBJECT(meas_assign_combo.po_window), "leave-notify-event", G_CALLBACK(handle_leave_notify_event), NULL);

  // Create the list of measurements
  gtk_widget_show_all(meas_assign_combo.po_window);
}

按钮数组定义:

// measurement assignment buttons (for combo box selections)
static struct generic_button as_meas_assignments[]={
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
  {0, 0, 120, 20, {"measurement-name-bg"}},
};

内容的提问来源于stack exchange,提问作者anon1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:22:01