gtk list

python tkinter 利用canvas,创建treeview时,添加对应的checkbutton多选按钮,而且鼠标滚轮对应整个界面 这次是要求treeview的每一行对应一个多选按钮, 功能:1.勾选按钮,tree对应的行就会改变颜色 2.点击tree的行,按钮也相应的被打勾 3.全选按钮会根据 下面多选按钮的情况,改变状态! 代码要点:1.操作滚动条时,对应移动的是tree+按钮,所以得用canvas,还得设定<MouseWheel>... 阅读详情

GTK+中的树状列表构件(GtkTreeView)

在本章的GTK+程序设计教程中,我们将向大家重点介绍非常常用也有点复杂的构件——GtkTreeView 。

GtkTreeView 构件是一个高级的构件,利用他你就可以制作出漂亮的普通列表或者是树状的列表。这个构件里可以包含一或者多行。他的构架呢?正是采用了大名鼎鼎的MVC (Model View Controller) 设计框架。也就是说数据和显示方式是进行了一种分离的操作。

之前我们有说过复杂这个问题,于是在GtktreeView构件中确实还有着其他几个独立的对象结构(objects)。其中 GtkCellRenderer 就决定了在GtkTreeViewColumn. 中的数据究竟是如何来进行显示呈现的。GtkListStore 和 GtkTreeStore 的功能为体现模型(model)的作用。也就是说他们是用来处理和分析将要在GtkTreeView显示的数据的。 GtkTreeIter 则是一个数据结构被用于在GtkTreeView构件中,对行中的数据进行操作。 GtkTreeSelection 则是用来处理选项的。

一个简单的列表构件示例(Simple List View)

在这个例子中将向大家展示一个简单的列表效果。显示的数据仅仅是文本。

#include <gtk/gtk.h>

enum
{
  LIST_ITEM = 0,
  N_COLUMNS
};

static void
init_list(GtkWidget *list)
{

  GtkCellRenderer *renderer;
  GtkTreeViewColumn *column;
  GtkListStore *store;

  renderer = gtk_cell_renderer_text_new();
  column = gtk_tree_view_column_new_with_attributes("List Items",
          renderer, "text", LIST_ITEM, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

  store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);

  gtk_tree_view_set_model(GTK_TREE_VIEW(list), 
      GTK_TREE_MODEL(store));

  g_object_unref(store);
}

static void
add_to_list(GtkWidget *list, const gchar *str)
{
  GtkListStore *store;
  GtkTreeIter iter;

  store = GTK_LIST_STORE(gtk_tree_view_get_model
      (GTK_TREE_VIEW(list)));

  gtk_list_store_append(store, &iter);
  gtk_list_store_set(store, &iter, LIST_ITEM, str, -1);
}


void  on_changed(GtkWidget *widget, gpointer label) 
{
  GtkTreeIter iter;
  GtkTreeModel *model;
  char *value;


  if (gtk_tree_selection_get_selected(
      GTK_TREE_SELECTION(widget), &model, &iter)) {

    gtk_tree_model_get(model, &iter, LIST_ITEM, &value,  -1);
    gtk_label_set_text(GTK_LABEL(label), value);
    g_free(value);
  }

}

int main (int argc, char *argv[])
{

  GtkWidget *window;
  GtkWidget *list;

  GtkWidget *vbox;
  GtkWidget *label;
  GtkTreeSelection *selection; 

  gtk_init(&argc, &argv);


  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_container_set_border_width(GTK_CONTAINER(window), 10);
  gtk_widget_set_size_request(window, 270, 250);
  gtk_window_set_title(GTK_WINDOW(window), "List View");

  list = gtk_tree_view_new();
  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);

  vbox = gtk_vbox_new(FALSE, 0);

  gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5);

  label = gtk_label_new("");
  gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);

  gtk_container_add(GTK_CONTAINER(window), vbox);

  init_list(list);
  add_to_list(list, "Aliens");
  add_to_list(list, "Leon");
  add_to_list(list, "Capote");
  add_to_list(list, "Saving private Ryan");
  add_to_list(list, "Der Untergang");


  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

  g_signal_connect(selection, "changed", 
      G_CALLBACK(on_changed), label);

  g_signal_connect(G_OBJECT (window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(window);

  gtk_main ();

  return 0;
}

在我们上面的这个示例代码中,我们将向大家展示的是5个条目并布置于GtkTreeView 构件中。我们首先在window中放置一个GtkVBox 构件。 在这个 GtkVBox 构件中含有两个构件:GtkTreeView和GtkLabel。

  list = gtk_tree_view_new();
  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);

上面的代码生成了一个 GtkTreeView 构件并且栏数被设置为FALSE即只有一栏。

  label = gtk_label_new("");
  gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);

生成了一个 GtkLabel构件,并且把它放置在GtkTreeView构件的下方,设置为居中。

 init_list(list);

调用list()函数,初始化构件list。

 renderer = gtk_cell_renderer_text_new();
 column = gtk_tree_view_column_new_with_attributes("List Items",
         renderer, "text", LIST_ITEM, NULL);
 gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

在初始化函数中,我们生成了只有一栏的GtkTreeView。

 store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);

 gtk_tree_view_set_model(GTK_TREE_VIEW(list), 
     GTK_TREE_MODEL(store));

接下来我们又生成了一个GtkListStore 构件(a model) 然后把它与list 构件绑定。

 g_object_unref(store);

这个 model 被自动的销毁,以释放内存空间。

 add_to_list(list, "Aliens");

上面就是在调用add_to_list()函数,实现向list 中在增加一个选项的功能。

 store = GTK_LIST_STORE(gtk_tree_view_get_model
     (GTK_TREE_VIEW(list)));

 gtk_list_store_append(store, &iter);
 gtk_list_store_set(store, &iter, LIST_ITEM, str, -1);

在函数add_to_list() 中,我们利用系统函数gtk_tree_view_get_model()来获得model。我们生成新的一行并把行中的数据交给model处理,这里正是借助 GtkTreeIter来完成这个功能。

 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

GtkTreeSelection际上并不需要明确生成。在这里,我们是利用 GtkTreeView构件自动来生成。来帮助完成这项工作的正如你所见到的是系统函数gtk_tree_view_get_selection()。

 g_signal_connect(selection, "changed", 
     G_CALLBACK(on_changed), label);

这个就很好理解了,把changed 信号与 GtkTreeSelection绑定,我们就可以与回调函数on_changed()建立了联系。

 gtk_tree_model_get(model, &iter, LIST_ITEM, &value,  -1);
 gtk_label_set_text(GTK_LABEL(label), value);

在这个回调函数里,我们取得了对应行的数据,当然是通过iter 来获取的。


List View
Figure: List View

高级列表(Advanced List View)

在第二个例子中,我们将在前者的基础上填加一些额外的功能。我们将实现能够列表中填加或者去处其中的数据项。

#include <gtk/gtk.h>

enum
{
  LIST_ITEM = 0,
  N_COLUMNS
};

GtkWidget *list;


static void
append_item(GtkWidget *widget, gpointer entry)
{
  GtkListStore *store;
  GtkTreeIter  iter;

  const char *str = gtk_entry_get_text(entry); 

  store = GTK_LIST_STORE(gtk_tree_view_get_model(
       GTK_TREE_VIEW(list)));

  gtk_list_store_append(store, &iter);
  gtk_list_store_set(store, &iter, LIST_ITEM, str, -1);
}

static void
remove_item(GtkWidget *widget, gpointer selection)
{
  GtkListStore *store;
  GtkTreeModel *model;
  GtkTreeIter  iter;


  store = GTK_LIST_STORE(gtk_tree_view_get_model(
      GTK_TREE_VIEW (list)));
  model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));

  if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) 
      return;

  if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), 
      &model, &iter)) {
    gtk_list_store_remove(store, &iter);
  }
}

static void
remove_all(GtkWidget *widget, gpointer selection)
{
  GtkListStore *store;
  GtkTreeModel *model;
  GtkTreeIter  iter;


  store = GTK_LIST_STORE(gtk_tree_view_get_model(
      GTK_TREE_VIEW (list)));
  model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));

  if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) 
      return;
  gtk_list_store_clear(store);
}

static void
init_list(GtkWidget *list)
{

  GtkCellRenderer    *renderer;
  GtkTreeViewColumn  *column;
  GtkListStore       *store;

  renderer = gtk_cell_renderer_text_new();
  column = gtk_tree_view_column_new_with_attributes("List Item",
          renderer, "text", LIST_ITEM, NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW (list), column);

  store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);

  gtk_tree_view_set_model(GTK_TREE_VIEW (list), 
      GTK_TREE_MODEL(store));

  g_object_unref(store);
}


int main (int argc, char *argv[])
{

  GtkWidget *window;
  GtkWidget *sw;

  GtkWidget *remove;
  GtkWidget *add;
  GtkWidget *removeAll;
  GtkWidget *entry;

  GtkWidget *vbox;
  GtkWidget *hbox;

  GtkTreeSelection *selection; 

  gtk_init(&argc, &argv);


  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  sw = gtk_scrolled_window_new(NULL, NULL);
  list = gtk_tree_view_new();

  gtk_window_set_title (GTK_WINDOW (window), "List View");
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  gtk_widget_set_size_request (window, 370, 270);

  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw),
            GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw),
            GTK_SHADOW_ETCHED_IN);

  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);

  vbox = gtk_vbox_new(FALSE, 0);

  gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);

  hbox = gtk_hbox_new(TRUE, 5);

  add = gtk_button_new_with_label("Add");
  remove = gtk_button_new_with_label("Remove");
  removeAll = gtk_button_new_with_label("Remove All");
  entry = gtk_entry_new();

  gtk_box_pack_start(GTK_BOX(hbox), add, FALSE, TRUE, 3);
  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 3);
  gtk_box_pack_start(GTK_BOX(hbox), remove, FALSE, TRUE, 3);
  gtk_box_pack_start(GTK_BOX(hbox), removeAll, FALSE, TRUE, 3);

  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 3);

  gtk_container_add(GTK_CONTAINER (sw), list);
  gtk_container_add(GTK_CONTAINER (window), vbox);

  init_list(list);

  selection  = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

  g_signal_connect(G_OBJECT(add), "clicked",
          G_CALLBACK(append_item), entry);

  g_signal_connect(G_OBJECT(remove), "clicked",
          G_CALLBACK(remove_item), selection);

  g_signal_connect(G_OBJECT(removeAll), "clicked",
          G_CALLBACK(remove_all), selection);

  g_signal_connect (G_OBJECT (window), "destroy",
          G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(window);

  gtk_main ();

  return 0;
}

与前面的例子中的label不同的是,我们生成了三个按钮和一个单行文本输入框。我们将实现能够动态的为列表增加一个新的数据项或者去处选中的数据项以及全部数据项。

 sw = gtk_scrolled_window_new(NULL, NULL);
 ...

 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw),
           GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw),
           GTK_SHADOW_ETCHED_IN);

 ...
 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);
 ...
 gtk_container_add(GTK_CONTAINER (sw), list);

GtkTreeView构件被放置在带有滑块的窗口中。

 if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), 
     &model, &iter)) {
   gtk_list_store_remove(store, &iter);
 }

系统函数 gtk_list_store_remove()的功能是去处列表中的所选的数据项。

 gtk_list_store_clear(store);

系统函数gtk_list_store_clear()将用于清除列表中的所有数据项。

 if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) 
     return;

上面的代码是用于检查是否在列表中还存有剩下的数据项。很显然,我们能够把列表清除的一干二净。


Advanced List View
Figure: Advanced List View

树状视图(Tree View)

接着,我们将向大家展示如何运用构件GtkTreeView来去显示有等级差异的数据项。在先前的两个例子中,我们我们用到了列表试图,现在我们介绍树状视图。

#include <gtk/gtk.h>

enum
{
  COLUMN = 0,
  NUM_COLS
} ;

void  on_changed(GtkWidget *widget, gpointer statusbar) 
{
  GtkTreeIter iter;
  GtkTreeModel *model;
  char *value;


  if (gtk_tree_selection_get_selected(
      GTK_TREE_SELECTION(widget), &model, &iter)) {

    gtk_tree_model_get(model, &iter, COLUMN, &value,  -1);
    gtk_statusbar_push(GTK_STATUSBAR(statusbar),
        gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), 
            value), value);
    g_free(value);
  }
}


static GtkTreeModel *
create_and_fill_model (void)
{
  GtkTreeStore *treestore;
  GtkTreeIter toplevel, child;

  treestore = gtk_tree_store_new(NUM_COLS,
                  G_TYPE_STRING);

  gtk_tree_store_append(treestore, &toplevel, NULL);
  gtk_tree_store_set(treestore, &toplevel,
                     COLUMN, "Scripting languages",
                     -1);

  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "Python",
                     -1);
  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "Perl",
                     -1);
  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "PHP",
                     -1);

  gtk_tree_store_append(treestore, &toplevel, NULL);
  gtk_tree_store_set(treestore, &toplevel,
                     COLUMN, "Compiled languages",
                     -1);

  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "C",
                     -1);

  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "C++",
                     -1);

  gtk_tree_store_append(treestore, &child, &toplevel);
  gtk_tree_store_set(treestore, &child,
                     COLUMN, "Java",
                     -1);

  return GTK_TREE_MODEL(treestore);
}



static GtkWidget *
create_view_and_model (void)
{
  GtkTreeViewColumn *col;
  GtkCellRenderer *renderer;
  GtkWidget *view;
  GtkTreeModel *model;

  view = gtk_tree_view_new();

  col = gtk_tree_view_column_new();
  gtk_tree_view_column_set_title(col, "Programming languages");
  gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);

  renderer = gtk_cell_renderer_text_new();
  gtk_tree_view_column_pack_start(col, renderer, TRUE);
  gtk_tree_view_column_add_attribute(col, renderer, 
      "text", COLUMN);

  model = create_and_fill_model();
  gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
  g_object_unref(model); 

  return view;
}


int
main (int argc, char **argv)
{
  GtkWidget *window;
  GtkWidget *view;
  GtkTreeSelection *selection; 
  GtkWidget *vbox;
  GtkWidget *statusbar;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_title(GTK_WINDOW(window), "Tree View");
  gtk_widget_set_size_request (window, 350, 300);


  vbox = gtk_vbox_new(FALSE, 2);
  gtk_container_add(GTK_CONTAINER(window), vbox);


  view = create_view_and_model();
  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));

  gtk_box_pack_start(GTK_BOX(vbox), view, TRUE, TRUE, 1);

  statusbar = gtk_statusbar_new();
  gtk_box_pack_start(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);

  g_signal_connect(selection, "changed", 
      G_CALLBACK(on_changed), statusbar);

  g_signal_connect (G_OBJECT (window), "destroy",
          G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(window);

  gtk_main();

  return 0;
}

在我们上面的示例中,我们来完成一项任务:把脚本语言和传统编程语言对应的数据项,进行区分。“语言种类”作为其对应数据项中的顶层节点,也就是说是一行数据列表的“头头”。当前选种的数据项,将在状态栏中显示出来。

从上面的这些步骤中,我们可以清晰的看到,树状视图与列表视图的生成方法很相似。

 GtkTreeStore *treestore;

这里我们当然要使用一个不同的model—— GtkTreeStore。

 treestore = gtk_tree_store_new(NUM_COLS,
                 G_TYPE_STRING);

我们生成的 GtkTreeStore只有一列。

 gtk_tree_store_append(treestore, &toplevel, NULL);
 gtk_tree_store_set(treestore, &toplevel,
                    COLUMN, "Scripting languages",
                    -1);

这其中的代码就是在完成一个顶层节点的操作。

 gtk_tree_store_append(treestore, &child, &toplevel);
 gtk_tree_store_set(treestore, &child,
                    COLUMN, "Python",
                    -1);

上面的代码在生成一个子数据项。


Tree View
Figure: Tree View
使用GTK与Glade创建一个简单的列表的图形详解 首先需要说明的是,LZ只是说明一下最简单的创建一个普通列表的方式。关于GTK的GtkTreeView的使用非常复杂,它不像QT,直接可以拖一个表格就可以了,所以,提供过于灵活的使用方式带来的负面影响就是不容易掌控。LZ因为在写一个售票的系统,所以在显示车次、车票等信息时,必然会用到列表显示数据,建一个最普通的列表耗费了LZ好长时间的学习代价。如果读者也只是简单的想创建一个列表的话,不妨可以借鉴一下 阅读详情

相关推荐

GTK3实现自定义列表

实现列表项上移下移的办法

m0_60352504的博客 592

【转】 GTK+中的树状列表构件(GtkTreeView)

GTK+中的树状列表构件(GtkTreeView)在本章的GTK+程序设计教程中,我们将向大家重点介绍非常常用也有点复杂的构件——GtkTreeView 。GtkTreeView 构件是一个高级的构件,利用他你就可以制作出漂亮的普通列表或者是树状的列表。这个构件里可以包含一或者多行。他的构架呢?正是采用了大名鼎鼎的MVC (Model View Controller) 设计框架

woods2001的专栏 2759

GTK3.0高级控件(万字详解+源码)

3.4.1 GTK3.0的GtkTreeView:树视图 3.4.1 GTK3.0的GtkListBox:列表框 3.4.1 GTK3.0的GtkFlowBox:流动框 3.4.1 GTK3.0的GtkIconView:图标视图 3.4.1 GTK3.0的GtkSpinButton:旋转按钮(数值输入) 3.4.1 GTK3.0的GtkSpinner:旋转器(加载动画) 3.4.1 GTK3.0的GtkFrame:框架 3.4.1 GTK3.0的GtkAspectFrame:宽高比框架 3.4.1 GTK3

啊渊的专栏 948

二十二、Gtk4-ListView

GTK 4添加了新的列表对象GtkListView、GtkGridView和GtkColumnView。这个新特性在Gtk API参考—列表小构件概述中有描述。GTK 4还有其他实现列表的方法。它们是GtkListBox和GtkTreeView,它们是从GTK 3接管的。在Gtk开发博客中有一篇关于Matthias Clasen所写的列表小构件的文章。他描述了为什么开发GtkListView来取代GtkListBox和GtkTreeView。

Creationyang的博客 1987

查看GTK版本的命令

查看GTK版本的命令

突围 1万+

解决 `version ‘GLIBCXX_3.4.32‘ not found‘ not found` 错误

解决 `version 'GLIBCXX_3.4.32' not found' not found` 错误

engchina的专栏 5677

GTK4 LIST MODEL 知多少?

【GTK4】LIST MODEL总结 文章目录【GTK4】LIST MODEL总结一、LIST MODEL创建、管理工具1️⃣ GtkSliceListModel2️⃣ GtkFlattenListModel3️⃣ GtkMapListModel二、LIST MODEL的具体应用1️⃣ Pango objects2️⃣ GtkDirectoryList和GtkBookmarkList3️⃣ GtkDropDown三、LIST MODEL的增强版本GtkSelectionModel三种GtkSelectio

从善若水的博客 913

Ubuntu中 vsftpd 的安装与配置 (详细介绍)

简介 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。 vsftpd是 UNIX 操作系统中的一个开源的、免费的 FTP 服务软件。具有以下特点: 安全性高 轻小易用 支持系统用户匿名用户和虚拟用户的权限验证和相关操作 安装步骤如下: 1.将此命令复制到终端 sudo apt-get install vsftpd 2.安装完成后启动VSFTP

qq_43299421的博客 1万+

gtk list store

#include <gtk/gtk.h> static GtkWidget *window = NULL; static GtkTreeModel *model = NULL; static guint timeout = 0; typedef struct { const gboolean fixed; const guint number; const gchar *severity; const gchar *description; } Bug;...

ryf1099030083的博客 745

四十二、Fluent欧拉模型流化床模拟:从基础设置到颗粒动力学解析

本文详细解析了Fluent欧拉模型在流化床模拟中的应用,从基础概念到颗粒动力学设置全面覆盖。重点介绍了欧拉模型的颗粒温度概念、多相流配置技巧以及关键参数优化策略,帮助工程师准确模拟气固两相流动现象。通过实用案例演示了网格检查、求解器配置和边界条件设置的最佳实践。

weixin_27303545的博客 445

DEMATEL-ISM模型的Python实现——方法介绍以及代码复现

本文参考文献与网络资料,对DEMATEL-ISM方法做了介绍何步骤描述,并给出Python代码进行了计算和绘图。

cros1的博客 2万+

gtk4-rs核心组件详解:List Widgets、Actions和Event Loop

gtk4-rs是GTK 4的Rust绑定库,提供了强大的GUI开发能力。本文将深入解析其核心组件List Widgets、Actions和Event Loop,帮助开发者快速掌握高效构建响应式应用的关键技术。 ## 一、List Widgets:高效数据展示的终极方案 📊 在GUI应用中,数据列表展示是最常见的需求之一。gtk4-rs提供了多种列表组件,从简单的静态列表到高性能的动态列表,满

gitblog_00393的博客 477

SAP CRP能力计划详细说明操作及相关配置

2、求助朋友同事的希望破灭后,网上找了资料发现在百度搜索的资料基本都是没有说明白什么才产能计划,都没有详细的操作说明,然后用google去搜索了一些相关的文章,好像也没有详细的文章。然后也去SAP的官网搜索了相关的文章,都是文字性的表述,对系统的配置都没有很大的帮助,很久之前有记得在隐身人的博客中有提到CRP的能力计划的文章,然后试着去找了一下相关的文章。5、首先产能排产肯定涉及的就是是能力的问题,能力第一个能想到的就是工作中心中的能力页签,在流程制造中也叫资源,其实都是一个东西。

我小时候很黑的博客 4520

video-shotcraft 镜头卡解析:VerticalWordRollBlurCycle 竖向词条滚轮动效实战

本篇文章深度拆解 video-shotcraft 仓库中的 `vertical-word-roll-blur-cycle` 镜头卡:如何在 "Built for ___" 这类句尾场景用**竖向三行滚轮**替代平淡的淡入淡出换词,通过"垂直 blur 滚轮景深 + 落定染色"两个身份记号,让列举感与结论感一步到位。读完你将掌握该卡的完整参数表、混合缓动配方(`0.7·outQuint + 0.3·

gitblog_00219的博客 910

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

手把手教你学pcie--性能调优 - 中断机制优化

在PCIe系统开发中,中断机制是主机与设备之间通信的重要组成部分。然而,不当的中断设计可能导致CPU负载过高、延迟增加等问题。本文将详细介绍如何优化PCIe系统的中断机制,提升系统性能和响应速度。传统中断(INTx):通过专用引脚发送中断信号,可能引发冲突且效率较低。消息中断(MSI):通过内存写操作发送中断消息,避免冲突并提高效率。扩展消息中断(MSI-X):基于MSI改进,支持更多独立中断向量,适用于复杂场景。选择合适的中断模式对系统性能至关重要。

MHD0815的博客 294

gtk treeview单元格追加背景色

TreeView 可分为两个部分:一个是显示出来的,我们可以看见的文字、图像、复选框,下面称其为外部特征;一个是内部存储的数据。 先说外部特征:一个 TreeView 有多个 Column,而每个 Column 中可以有多个 CellRenderer,同时一个 CellRenderer 自身拥有多个属性。 TreeView 的内部数据由 TreeModel 决定,同时也由 TreeMo

macjk1的专栏 1526

基于ENVI完成影像的去云操作以及后续处理

利用ENVI完成重采样影像的去云操作 由于SNAP重采样之后的影像是分波段保存的,ENVI的波段运算工具一次也只能输出一个波段,所以去云的操作分波段进行,原理是掩膜法 下面是打开所有波段后的界面 去云的依据是以quality_scene_classification栅格文件为基础,该文件是哨兵2数据自带的场景质量分类图,包含12个级别,可以通过SNAP软件查看,如下图所示: 对于去云操作而言,我们只需要DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(云阴影)、CL

lemon_tttea的博客 2万+

GTK+ FAQ

 GTK+ FAQ Tony GaleShawn AmundsonEmmanuel Deloget总说明     April 30th 2003

kw123信息专栏 6696

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ubuntu 9.10 安装最新的gtk libgtk2.0-dev

出处:http://blog.youkuaiyun.com/myparadise/article/details/4820333 ubuntu9.10正式版刚一发布,我就迫不急待的把系统换上最新的。令人很不爽的是我安装gtk的开发库却遇到了问题,大概是版本依赖,折腾了几天还是没弄好。于是又偿式了用dpkg安装deb包,一个一个安装,依赖性太多,还没安装一半我就放弃了。最后细看ubuntu包管理网

1123

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

问题:您必须在 sources.list 中指定代码源(deb-src)URI

初学linux

wsw_wsw_的博客 1400

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

gtk treeview MVC

http://hi.baidu.com/20065562/item/72d204cf5188f03b449416af http://www.cnblogs.com/cy163/archive/2007/06/16/785358.html

qq550764107的专栏 655

GTK tutorial 九

Aspect Frames widget 与 frame widget 类似,区别在于,此widget强制设置了放置在其中的widget的纵横比,为了符合此纵横比,此widget根据需要会调整此widget所包含的空间。当你预览一个图片时,你最大化窗口,图片跟着放大, 那么图片的纵横比是不是要与之前的一致呢。scrolled window 用于创建一个可滚动的区域,此区域中可以放入任何类型的widget.不论区域中的widget的尺寸多大,都能通过滚动条对区域中的widget进行查看。1,看看会发生什么。

编程是一门艺术 1031

建立gtklist以及radio的关键代码片断

 /*建立gtklist的关键代码片断,以及建立单选按钮的关键代码片断*//*建立gtk_list*/GtkWidget *gtk_list;gtk_list = gtk_list_new();gtk_widget_show(gtk_list); /*添加3个列表项标签方法1*/GtkWidget *listitem;listitem = gtk_list_item_new_wit

QuietHeart的专栏 991

linux下鼠标主题以及gtk主题,图标主题,字体的设置

学习linux,如果专注于去搞漂亮花哨的界面,是舍本逐末。 不过,毕竟是自己要工作的环境,如果界面太难看,自己都看不下去了,肯定也不好。 主题,图标,字体等常见元素需要知道如何定制。 如果使用基于gtk的界面,如gnome,xfce,openbox等 可以在家目录下建立.gtkrc-2.0文件,如果已经存在就不用重新创建,加入下面四行就能很容易的改变相应元素 gtk-cu

TOPGUN的专栏 7125

python开发linux桌面应用_Linux桌面程序开发 | Study Python For Gtk3

背景:​ 使用Linux系统已经有一段时间了,在管理系统是几乎都是使用命令行与内核交流的,使用虽多的就是Shell,其次就是python。这两天突然心血来潮,想到了Linux PC端桌面程序,在我个人的熟悉语言中呢,python比较适合,不过、开发Linux桌面我只是玩玩的。对于开发Linux桌面程序掌握Python的推荐使用Python Gtk3。​ 想玩出一个Linux基本桌面程序( ...

weixin_39614561的博客 2190
下一篇: linux
jing1927
博客等级 码龄14年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值