我正在尝试检索与给定(字符串)Gtk股票ID对应的(字符串)图标名称.
Gtk stock id'gtk-go-forward'有两个相应的图标名称,'gtk-go-forward-ltr'和'gtk-go-forward-rtl'.我想找回:
我正在使用gobject内省API,而不是基本C.
我正在尝试为St.Icon
股票ID指定的图标制作,但尺寸较大(96像素).
我可以使用gtk_icon_set_render_icon
与股票ID"GTK的奋力向前",直接像这样(它挑选LTR版)(语法是GNOME javscript但这是无关的quesiton;我使用GObject的自省API):
let style = Gtk.Widget.get_default_style();
let iconset = style.lookup_icon_set('gtk-go-forward');
let icon = new St.Icon({
gicon: iconset.render_icon(gtkStyle, Gtk.TextDirection.LTR,
Gtk.StateType.NORMAL, Gtk.IconSize.DIALOG,
null, null),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
Run Code Online (Sandbox Code Playgroud)
这将给我一个股票ID'gtk-go-forward'的图标(它选择'gtk-go-forward-ltr'),但图标非常模糊.
或者,如果我直接输入图标名称'gtk-go-forward-ltr',则图标不会模糊:
let icon = new St.Icon({
gicon: Gio.ThemedIcon.new_with_default_fallbacks('gtk-go-forward-ltr'),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
Run Code Online (Sandbox Code Playgroud)
总而言之,我认为获得一个大的非模糊图标最好的办法是找到股票ID的图标名称,而不是使用股票ID(gtk-go-forward
上面的第二种方法会产生"缺少图标"图标)因为它不是有效的图标名称).
在上图中,顶部图标使用第一种方法(库存ID和render_icon),底部图标使用第二种方法(直接使用图标名称).清晰度差异很大.
我试图在GTK中使用图像按钮#(Xamarin Studio).我将图像设置为按钮,在UI Builder中,图像即将出现.
但是当我运行程序时,按钮中没有图像
我在不同版本的IDE和不同平台(Mac和Windows)上试过这个
请帮忙
更新:MainWindow.cs
using System;
using Gtk;
public partial class MainWindow: Gtk.Window
{
public MainWindow () : base (Gtk.WindowType.Toplevel)
{
Build ();
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在gtk-gui文件夹中,我可以找到这些文件
generated.cs
// This file has been generated by the GUI designer. Do not modify.
namespace Stetic
{
internal class Gui
{
private static bool initialized;
internal static void Initialize (Gtk.Widget iconRenderer)
{
if ((Stetic.Gui.initialized == …
Run Code Online (Sandbox Code Playgroud) 我想知道自用户上次按键或移动鼠标以来已经有多长时间 - 不仅在我的应用程序中,而且在整个"计算机"(即显示器)上,以便猜测它们是否仍在电脑,能够观察屏幕上弹出的通知.
我想纯粹从(Py)GTK +这样做,但我可以调用特定于平台的函数.理想情况下,我想调用已经包含在Python中的函数,但是如果不可能的话,我不会超过一点C或ctypes
代码,只要我知道我实际上在寻找什么.
在Windows上我认为我想要的功能是GetLastInputInfo
,但这似乎并没有被pywin32包装; 我希望我错过了一些东西.
我正在将GTK#应用程序集成到Mac OS X.Mac OS X上的GTK是一些Cocoa和Carbon基础的包装器.我们直接使用Carbon全局菜单API有一些特定于平台的东西(它比Cocoa更低级和更灵活,我们不需要是64位).
在Carbon将它们作为命令发送之前,似乎GTK吞噬了所有键盘事件.这是有道理的,因为没有Carbon命令到GTK世界的映射.一般来说,这不是问题,因为我们有一个全局键事件处理程序,并通过我们自己的命令系统调度所有内容.但是,这似乎阻止了Cmd-?从打开帮助搜索菜单,我找不到以编程方式执行此操作的方法.
菜单管理器的MenuSelect功能很有前途,但我还没有找到一种自动确定坐标的方法,由于某些原因它只在我两次击中组合时才有效...
或者,一种方式来发送Cmd-?对Carbon的命令处理进行击键或直接合成命令事件会很好,但我在那方面没有运气.
没有命令ID,Carbon的ProcessHICommand没有任何用处,我无法弄清楚它是什么(如果有的话)
关于Cocoa,我可以抓住NSWindow并调用InterpretKeyEvents,但是我没有任何运气成功合成NSEvent - 它只是发出哔哔声.我正在使用的事件是
var evt = NSEvent.KeyEvent (NSEventType.KeyDown, System.Drawing.PointF.Empty,
NSEventModifierMask.CommandKeyMask | NSEventModifierMask.ShiftKeyMask,
0, win.WindowNumber, NSGraphicsContext.CurrentContext, "?", "?",
false, (ushort) keycode);
Run Code Online (Sandbox Code Playgroud)
密钥代码是从GTK密钥映射确定为44.我使用普通的MonoMac(Cocoa)应用程序确认密钥代码是正确的,但是InterpretKeyEvents也不适用于该应用程序中的事件.我找不到与该命令相关的任何选择器.
如果我使用一个黑暗的主题然后链接在Eclipse-"快速修复"或即Eclipse-> Preferences-> General-> Editor(三个'see ..."File Associaton"|"Content Types"|"Appearance"' -links)是不可读的.
在这张图片上,我所说的链接是青色的灰色:
我找到了Windows/XP的解决方案:
悬停使用与系统上相同的颜色.在Windows上,您可以通过显示设置>外观>高级:工具提示进行更改.链接颜色是浏览器中使用的颜色(Windows上的IE).
但是,我需要一个Linux解决方案(XFCE 4.8.1/GTK)
我检查/测试了Eclipse的所有设置,我没有找到此链接颜色的设置.它似乎是一个系统设置(GTK),所以我已经尝试将其添加到gtkrc:
style "default" {
GtkWidget::link-color = "#ffffff"
}
class "GtkWidget" style "default"
Run Code Online (Sandbox Code Playgroud)
但这并未改变Eclipse中的链接颜色.
我希望你能帮忙 - 谢谢!
我有一个使用GTK +和Glade的应用程序; 使用memcheck工具运行Valgrind会输出大约2,000个错误.有没有人有一个很好的抑制文件,他们可以分享GTK应用程序?
我尝试了这些,但每个仍然留下了约900个错误:
我可以在这里找到我正在使用的代码的副本.做make run
构建GUI(这个代码副本中只有GUI).
我正在尝试在RHEL5盒子上构建一个新版本的wireshark 1.10,目的是制作一个RPM,以便我支持的客户可以安装它.可能是其他人,如果我能找到一个地方来举办它.
WS1.10依赖于GTK +以及可用rpm包不支持的其他几个库.因此,我必须手工制作它们.GTK +需要pango(1.24.5)和cairo(1.8.8)支持.
从源代码构建并安装了较新版本的cairo之后,pango的./configure会出现以下错误
checking for CAIRO... yes
checking which cairo font backends could be used... none
configure: Disabling cairo support
Run Code Online (Sandbox Code Playgroud)
然后在最后./configure显示
configuration:
backends: X
Run Code Online (Sandbox Code Playgroud)
我可以通过查看/ usr/local/lib中的pkg_config来验证是否安装了Cairo.
我甚至看过pango config.log.但是我没有看到任何与我上面提到的消息有任何不同之处.
有哪些地方我应该寻找一个不那么简洁的错误信息?我对此进行故障排除有点不知所措.
我正在寻找一种方法从其父级(无论可能是什么 - 一个VBox,一个网格......)中删除一个小部件,并在其位置添加一个替代小部件.
我找到了这个答案,但我似乎无法使其与Gtk3一起使用.
这是我试过的:
from gi.repository import Gtk
def replace_widget(old, new):
parent= old.get_parent()
props= {}
for key in Gtk.ContainerClass.list_child_properties(type(parent)):
props[key.name]= parent.child_get_property(old, key.name)
parent.remove(old)
parent.add_with_properties(new, **props)
Run Code Online (Sandbox Code Playgroud)
但是要求Gtk.ContainerClass.list_child_properties
加油
TypeError: argument self: Expected a Gtk.ContainerClass, but got gi.repository.Gtk.GObjectMeta
Run Code Online (Sandbox Code Playgroud)
它也不会接受容器小部件的实例.对于我的生活,我无法弄清楚我应该通过什么参数.
PS:我知道我可以在容器和子窗口小部件之间添加另一个窗口小部件,但我不想这样做.
更新:我想这还不够清楚:替代小部件应该与原始小部件位于同一个地方,具有相同的打包属性.
我希望我的GTK应用程序在系统托盘中有一个状态图标,我使用StatusIcon可以很好地工作,但是这已被弃用:
gtk_status_icon_new自版本3.14起已被弃用,不应在新编写的代码中使用.
使用通知
文档说"使用通知",但我不知道这实际意味着什么.我将此解释为"使用桌面通知",但据我所知,这是一个完全不同的目的.我想要一个始终可见的系统托盘图标,而不是临时弹出通知.尽管如此,我找不到任何其他似乎是"通知"的含义.
是否存在GtkStatusIcon的新替代品,它在系统托盘中提供了一个图标,支持接收鼠标点击/滚动信号并显示弹出菜单?
我有两个GTK窗口
正常(主)窗口运行动画,在注册的回调中绘制内容gtk_widget_add_tick_callback()
.
在某些时候,创建了运行模态循环的辅助窗口:
void show_modal()
{
GtkWindow* gw = gtkwindow(this);
if( parent() )
gtk_window_set_transient_for(gw, gtkwindow( parent() ));
gtk_widget_show(GTK_WIDGET(gw));
gtk_window_set_modal(gw,TRUE);
gtk_window_set_keep_above(gw,TRUE);
this->update_window_state(gool::WINDOW_SHOWN);
while( this->is_valid_window() )
{
if(this->_window_state == WINDOW_HIDDEN) break;
if(this->_window_state == WINDOW_STATE_NA) break;
gtk_main_iteration(); // gtk_main_iteration_do(true);
}
}
Run Code Online (Sandbox Code Playgroud)问题:主窗口中的动画工作正常,直到show_modal()
被调用.它显示为gtk_main_iteration();
按gtk_widget_add_tick_callback()
功能添加的块标记.一旦我关闭辅助窗口,所以while() {gtk_main_iteration();}
循环退出然后主窗口中的动画再次开始运行.
想知道如何在GTK中制作"动画友好"的模态循环吗?
更新:gtk_main_iteration();
除了"当前"之外,它看起来像块不仅是滴答而是任何窗口的任何更新 - 它们只是被冻结.这种GTK行为的原因是什么?
更新#2:
gtk_dialog_run();
表现完全一样gtk_main_iteration();
- 锁定活动窗口以外的任何窗口上的任何更新.