我是Gtk#和Gdk#的完全新手,我完全迷失了如何开始.
我想要做的就是在任何小部件/像素图/图像中绘制点和线,然后在我的gtk应用程序中显示它们.
到目前为止,我理解我必须创建一个Gdk.drawable对象来访问DrawPoints(Point[] points)和DrawLine(Point[] points)方法.但是,要实例化一个Drawable对象,我需要一个Gdk.GC对象.两个对象构造函数都有一个IntPtr参数,我不知道IntPtr我应该在这里传递什么?!或者,GC构造函数也可以使用Drawable对象,而Drawable构造函数可以使用GC对象......我在这里转圈!
这是24小时的在线研究,除了一些python示例使用不带参数的构造函数,我找不到任何资源来开始使用C#.
那么,有谁能告诉我如何正确使用这些GC和Drawable对象来使用该DrawLine(Point[] points)方法绘制一条线?
GDKEXAMPLE(){
win = new Gtk.Window ("Gdk nightmare");
win.SetDefaultSize (400, 300);
img=new Gtk.Image();
Drawable dr=new Drawable(null); //how to instantiate this object?
Gdk.GC gc=new Gdk.GC(null); //how to instantiate this object?
Point[] pts=new Point[3];
pts[0]=new Point(10,10);
pts[1]=new Point(15,20);
pts[2]=new Point(20,50);
dr.DrawLines(gc,pts);
Pixmap pxmp=new Pixmap(dr,100,100);
img.SetFromPixmap(pxmp,pxmp); //Requests a pixmap and pixmap mask: what mask?
img.QueueDraw();
win.Add(img);
win.ShowAll();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我使用Gdk.GC …
groovy的扩展模块是java的继承功能的混合形式吗?为什么扩展模块需要声明为静态?
我有这个需要x屏幕截图的python代码。
#!/usr/bin/python
import gtk.gdk
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save("screenshot.png","png")
print "Screenshot saved to screenshot.png."
else:
print "Unable to get the screenshot."
Run Code Online (Sandbox Code Playgroud)
它有效,但是我需要导入from gi.repository import Gdkgtk.gdk。我尝试了以下方法:
#!/usr/bin/python
from gi.repository import Gtk, Gdk, GdkPixbuf
from gi.repository.GdkPixbuf import Pixbuf
w = Gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz …Run Code Online (Sandbox Code Playgroud) 我想检测用户何时完成重新调整大小或移动 GTK 窗口。基本上相当于Windows 中的WM_EXITSIZEMOVE。
我已经查看了GTK 检测用户窗口调整大小,并且能够使用配置事件检测大小/位置更改;但是,由于我的其他代码是架构师,我想知道调整大小何时完成。几乎就像 ValueChanged 而不是 ValueChanging 事件。
我在想是否我能找出鼠标按钮是否被释放,然后尝试检测它是否是我得到的最后一个事件。但是对于 window 对象也找不到办法做到这一点。
我已经在 Xlib 程序中实现了文本字符串的复制粘贴。当我的程序拥有当前选择,并且我粘贴到 xterm、gimp 中的文本字段或 firefox 中时,它工作正常:我粘贴到的程序将 SelectionRequest 事件发送到我的程序,目标为 XA_UTF8_STRING ("UTF8_STRING "),我的程序会适当响应并粘贴字符串。
但是,当我的程序拥有当前选择,并且我尝试粘贴到 Thunderbird(版本 16.0.2)中的消息编写窗口或 SeaMonkey Web 浏览器(版本 2.20)中的文本字段中时,Thunderbird 和 SeaMonkey 会向我的程序发送一个 SelectionRequest 事件。使用目标 XA_TARGETS(“TARGETS”)进行程序,并且出现问题。我的理解是,我的程序应该响应它可以提供的一系列目标 - 我的程序的相关代码如下。(注意这是在64位机器上,Atom类型是64位)。Thunderbird / SeaMonkey 似乎对我的回复不满意,因为他们随后向我的程序发送了许多具有不同目标的后续 SelectionRequest 事件,就好像他们试图查看我将返回哪一个(他们尝试 application/x-moz-nativehtml, text/html、application/x-moz-file、image/png、image/jpeg、image/gif),然后最后尝试目标 UTF8_STRING,我的代码成功响应并粘贴了字符串。这一切可能需要 1 秒或更长时间,因此在粘贴字符串之前会有明显的延迟。
为了尝试调试,我修改了代码,以便当我粘贴到我的程序中时,另一个程序是所有者,我向它们发送一个带有目标 XA_TARGETS 的 SelectionRequest 事件,这样我就可以看到 Thunderbird 或 SeaMonkey 如何响应。我返回一个 SelectionNotify 事件,目标为 XA_TARGETS,并且该事件的属性设置为我请求的属性,当我在自己的窗口上读取该属性时,我发现它是一个类型为 XA_ATOM、格式为 32、长度为 0 的数组。因此,当我向 Thunderbird 或 SeaMonkey 询问时,我似乎没有从他们那里得到任何目标数组。
平台:Ubuntu 12.10 Linux x86_64
我使用的参考: http://svn.gna.org/svn/warzone/trunk/lib/betawidget/src/platform/sdl/clipboardX11.c
...
if ( event.type == SelectionRequest ) {
Atom propertyOfRequestorToSet = event.xselectionrequest.property==None ? XA_PRIMARY : …Run Code Online (Sandbox Code Playgroud) 我试图在Gdk屏幕上找到指针位置并找到gdk_display_get_pointer(),它工作正常,但它被标记为已弃用并且gdk_device_get_position()现在指的是.
但是我该如何使用这个功能呢?我不能得到一个GdkDevice,因为没有工厂,也没有构造函数.
在我的应用程序中,我想使用组合键检查GTK key_press事件<Ctrl><Shift><#>。
我的代码:(在这种情况下是Python,但我想问题是语言无关的)
def on_key_press(self, widget, event):
if ((event.keyval == Gdk.KEY_numbersign) \ # The problem
and (event.state & Gdk.ModifierType.SHIFT_MASK) \
and (event.state & Gdk.ModifierType.CONTROL_MASK)):
dosomethingamazing()
Run Code Online (Sandbox Code Playgroud)
Gtk处理按键的方式,实际按键(例如“ a”)和Shift键组合为大写字母A。因此,当按下Shift键时,数字符号键将替换为QWERTZ布局上的撇号键。此组合的event.keyval是39(撇号),而不是35(数字符号)。因此,因为<Ctrl><Shift><#>我需要检查数字符号(而不是数字符号)的大写形式,这在不同的键盘布局上可能会有所不同,因此我无法对其进行硬编码。
问题如下:
>>> Gdk.keyval_to_upper(35) # 35 is the Key Value for numbersign
35
>>> Gdk.keyval_is_upper(35)
True
>>> Gdk.keyval_is_lower(35)
True
Run Code Online (Sandbox Code Playgroud)
我无法使用这些功能获得大写字母。关于如何获取<shift><whateverkey>组合结果的任何想法,哪里keyval_to_upper()失败?
根据GTK 官方文档,gdouble、gchar 等只是普通 C 类型的 typedef。
这有什么意义呢?为什么不简单地使用传统的名称,int,char;为什么要麻烦地对它们全部进行 typedef 并且据我所知,不向它们添加任何内容?
将我的Google Glass更新到XE16后,我使用simpleadapter构建的listview无法再滚动.有没有办法手动启用滚动GDK或修复此问题?
我正在开发一个小应用程序来截取所有物理监视器的截图.尽管在所有术语之间我都很困惑.我明白:
我很困惑,因为我想也许屏幕是台式机?我的应用程序不关心不可见的桌面,只是截取当前所有显示器上的内容.
我的理解是否正确?
到目前为止,这是我的GDK伪代码:
var rezArr = [];
gdk_display_manager_list_displays
for (var d=0; d<displays.length; d++) {
var nScreens = gdk_display_get_n_screens(displays[d]);
for (var s=0; s<nScreens; s++) {
var cScreen = gdk_display_get_screen(displays[d], s);
// var nMonitors = gdk_screen_get_n_monitors(cScreen);
// for (var m=0; m<nMonitors; m++) {
// var gdkRect = GdkRectangle();
// gdk_screen_get_monitor_geometry(cScreen, m, gdkRect);
// }
var cRootWin = gdk_screen_get_root_window(cScreen);
var cWidth = gdk_screen_get_width(cScreen);
var cHeight = gdk_screen_get_height(cScreen);
var cColormap = GdkColormap();
gdk_screen_set_default_colormap(cScreen, cColormap);
var cPixbuf = gdk_pixbuf_new(COLORSPACE_RGB, false, 8, cWidth, …Run Code Online (Sandbox Code Playgroud)