我正在尝试在计算正在进行时显示Gtk :: Spinner对象,但似乎没有任何事情发生。代码片段看起来像......
{
Gtk::Spinner spinner;
spinner.start ();
// do some work...
spinner.stop ();
}
我原本以为旋转器需要知道它出现在哪个对话框上,但是我看不到任何方式将它喂入对象。有谁知道我在哪里可以找到一个有效的例子?我可以在许多地方找到Gtk文档,但这没有多大帮助。
答案 0 :(得分:2)
你有没有打电话
spinner.show ();
并将其添加到某个窗口?
此外,您的计算可能会阻止UI,因此不会更新。呼叫
while (Gtk::Main::events_pending ())
Gtk::Main::iteration ();
偶尔。
答案 1 :(得分:1)
要将鼠标光标更改为“忙碌”,您可以执行以下操作:
Glib::RefPtr<Gdk::Window> window = dialog.get_window();
if(window) {
window->set_cursor(Gdk::Cursor(Gdk::WATCH));
Gdk::flush();
}
要更改它,请执行
window->set_cursor();
代替。
免责声明:我通常在C中使用GTK,并且已经动态翻译了......
答案 2 :(得分:0)
简而言之,如果 Gtk :: Spinner 未出现在屏幕上,这是一个快速检查清单:
vbox.pack_start(spinner, Gtk::PACK_SHRINK);
show_all_children();
spinner.start()
才能使小部件实际出现并在屏幕上旋转。详细信息:
实际的Gtk微调器窗口小部件代码(请参见 gtkspinner.c 中的函数gtk_spinner_class_init())本身并未进行任何绘制。实际上,它的代码很少。它所做的只是向gtk小部件添加CSS代码:
因此,实际外观(图标)和动画是由您当前主题的CSS文件定义的。例如。在Gtk的默认主题的 gtk-contained.css 文件中,您会找到以下内容:
spinner {
background: none;
opacity: 0;
-gtk-icon-source: -gtk-icontheme("process-working-symbolic");
};
这意味着它将在主题的“图标”目录树中自动搜索基本名称为“ process-working-symbolic ”的适当图像文件。实际的旋转动画是在同一CSS文件中定义的:
spinner:checked {
opacity: 1;
animation: spin 1s linear infinite;
};
在大多数其他主题中,微调小部件的这些CSS代码部分几乎相同。
现在这是一个普遍的问题:在大多数主题中,微调器图像是SVG文件(例如,通常为“ process-working-symbolic.svg ”),但是库存的Gdk pixbuf加载器确实可以完全不支持SVG格式。它们支持多种其他图像文件格式,但是要真正允许Gdk / Gtk加载.svg文件,您需要安装能够执行此操作的第三方pixbuf加载程序,例如 librsvg 。
替代:
如果您不能或不想安装像 librsvg 这样的具有SVG功能的Gdk pixbuf加载程序,那么您也可以简单地添加具有相同基本名称的图像文件,但是以另一种文件格式(例如“ process-working-symbolic.png ”)添加到主题的图标目录树中。因此,请绘制或下载一些微调图片,然后对其进行缩放,并将其放置几次以达到主题的“ icons”目录中列出的分辨率,例如:
/THEMEDIR/icons/8x8/status/process-working-symbolic.png
/THEMEDIR/icons/16x16/status/process-working-symbolic.png
/THEMEDIR/icons/22x22/status/process-working-symbolic.png
/THEMEDIR/icons/24x24/status/process-working-symbolic.png
/THEMEDIR/icons/32x32/status/process-working-symbolic.png
/THEMEDIR/icons/64x64/status/process-working-symbolic.png
/THEMEDIR/icons/256x256/status/process-working-symbolic.png
/THEMEDIR/icons/512x512/status/process-working-symbolic.png
另外,您应该知道:每当您执行spinner.start()
时,微调器图标都会立即出现在屏幕上,但是即使在像样的机器上,微调器通常也要花一秒钟的时间才能开始播放动画。