我正在尝试将光标设置为手表.问题是gdk_set_cursor()需要一个gdk_window.如何在C中获取gtk_window的gdk_window?我见过gtkmm和pygtk的例子,但我找不到相应的C函数.
我正在调查一个问题并遇到一些可疑代码,涉及使用比较运算符比较Date实例.例如
def stamp = ... //Date
def offset = ... //Integer
def d = new Date(stamp.time + offset)
if (d < new Date()) {
...
}
Run Code Online (Sandbox Code Playgroud)
该资源表明以上内容等同于以下内容
def stamp = ... //Date
def offset = ... //Integer
def d = new Date(stamp.time + offset)
if (d.compareTo(new Date()) < 0) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,关于日期的GDK文档仅包含使用compareTo,before和after和比较日期的示例.我似乎特别回想起由于遇到意外结果而特别避免在日期使用比较运算符.在上面的两个代码示例确实当量(也就是,我可以放心地在Groovy中使用的日期比较操作,或者我应该只使用compareTo,before和after)?
谢谢!
在我的Gtk-Gdk-Cairo-Pango应用程序的开头,我创建了窗口:
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
Run Code Online (Sandbox Code Playgroud)
首先,有GtkWindow,但gtk_create_window返回GtkWidget,不是GtkWindow,为什么?
然后,一些功能,如gdk_window_process_updates(..)要求GdkWindow*.
gtk_window_set_geometry_hints()另一方面要求GtkWindow*.
在文档中也GdkWindow* gdk_window_new()有返回GdkWindow.
当然有文件说:
GdkWindow是屏幕上的矩形区域.它是一个低级对象,用于在GTK +级别实现高级对象,如GtkWidget和GtkWindow.GtkWindow是一个顶层窗口,用户可能会认为它是一个带有标题栏的"窗口"等等; 一个GtkWindow可能包含许多GdkWindow.
但它仍然没有告诉我,何时以及为什么我应该创建Gtk或Gdk窗口?这里的模式是什么?
现在你问,我想解决什么特别的问题?当然,我尝试在gtk + gdk之上使用cairo + pango在鼠标移动后立即绘制文本.问题是虽然实际绘图似乎表现得很快,但我无法像鼠标移动那样完成它.在我motion_notify_event刚刚调用的gtk_widget_queue_draw(GtkWidget)时候,实际鼠标在屏幕上移动有明显的滞后,即使我绘制单个字符,它在移动阶段也没有与鼠标指针对齐,只在鼠标停止后捕获它.
我尝试的是通过调用加速更新gdk_window_process_updates(GDK_WINDOW(window), false);,编译器吃它,但我得到了运行时断言:Gdk-CRITICAL **: gdk_window_process_updates: assertion 'GDK_IS_WINDOW (window)' failed.我找不到有关此宏的任何信息以及如何/何时使用它.
#include <gtk/gtk.h>
#define TXT "1234567890"
int X = 0, Y = 0;
static void do_drawing(cairo_t *);
GtkWidget *window; …Run Code Online (Sandbox Code Playgroud) 我试图让Guake终端在Unity中正常工作.它的窗口宽度等于屏幕宽度.但由于Unity左侧酒吧窗口的右边界变得无形.所以,我想为窗口设置合适的宽度.它必须小于实际窗口大小.并且代码必须在有或没有Unity的情况下正常工作.
这就是Guake如何确定其窗口的位置和大小:
def get_final_window_rect(self):
"""Gets the final size of the main window of guake. The height
is the window_height property, width is window_width and the
horizontal alignment is given by window_alignment.
"""
screen = self.window.get_screen()
height = self.client.get_int(KEY('/general/window_height'))
width = 100
halignment = self.client.get_int(KEY('/general/window_halignment'))
# get the rectangle just from the first/default monitor in the
# future we might create a field to select which monitor you
# wanna use
window_rect = screen.get_monitor_geometry(0)
total_width = window_rect.width
window_rect.height = window_rect.height * …Run Code Online (Sandbox Code Playgroud) 是/否 - 问题:是否有Groovy GDK函数来大写字符串的第一个字符?
我正在寻找一个Groovy等价的Perl的ucfirst(..)或Apache Commons StringUtils.capitalize(str)(后者大写输入字符串中所有单词的第一个字母).
我正在手工编写这个...
str = str[0].toUpperCase() + str[1 .. str.size() - 1]
Run Code Online (Sandbox Code Playgroud)
..哪个有效,但我认为有更多的Groovy方法可以做到这一点.我认为ucfirst(..)是比中心(..)更常见的操作,它是Groovy GDK中的标准方法(参见http://groovy.codehaus.org/groovy-jdk/java/lang/ String.html).
我有一个程序在窗口中显示具有固定帧速率(比如30 fps)的动画.
目前我使用SDL但不幸的是它缺乏桌面集成(如拖放),现在我想使用GTK.
所以我想做什么(假设窗口是双缓冲的):
1 obtain off-screen buffer
2 render my stuff to buffer
3 tell the toolkit to swap buffers
4 update window
5 repeat
Run Code Online (Sandbox Code Playgroud)
除了非常基本的GDK/GTK调用之外,我不想使用任何功能来创建和管理窗口并接收输入事件.
在FAQ中他们建议使用GdkRGB.但是,在GdkRGB的官方文档中,他们使用了gdk_draw_rgb_image()不推荐使用的功能,实际上大多数GdkRGB功能都是.
作为替代方案,他们建议使用OpenGL.问题是它需要一些不常见的库,如GtkGLArea,它不是GTK的一部分(我不想依赖任何默认安装的库).此外,在我的系统上,驱动程序的OpenGL支持是有限的.
我已经研究了Cairo(它是一些不赞成使用的功能的替代方案)但是这会为我相对简单的问题添加更多的样板代码(我怀疑需要额外的开销).
我想gdk_threads_enter()/leave()在我使用线程的应用程序中替换已弃用的函数.现在的应用程序,工作完美(虽然我不确定这是否是正确的方法).
我的主循环,运行gtk_main和信号处理程序.当我收到一个开始按钮时,我开始一个在主要背景中运行的线程.如何从该线程更新GUI.我知道根据GTK3和GDK3的文档,他们说通过使用避免它
gdk_threads_add_idle()
Run Code Online (Sandbox Code Playgroud)
要么
gdk_threads_add_timeout()
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望仅在单击"开始"时才进行更新,我该怎么做呢?有什么例子吗?我不是在问如何使用gdk_threads_add_idle(),我问的是如何在单击start后没有线程的情况下在main中运行worker函数.
单击按钮 - >在先前的线程中启动工作器功能 - >在GUI窗口中更新大量的GUI元素.
我最近开始学习Lisp并想编写一个使用gtk接口的程序.我已经安装了lambda-gtk绑定(在CMUCL上).我想在pixbuf上放置pixel/getpixel能力.但我发现我无法直接访问内存.(或者只是不知道怎么做)
函数(gdk:pixbuf-get-pixels pixbuf)给我一个数字 - 内存地址,我猜.在C++中,我可以轻松找到我需要的像素.有没有办法在Lisp中编写自己的putpixel?
使用gdk_screen_get_monitor_geometry,我可以得到像素的总面积和每个监视器的相对位置,即使有两个或更多用作单个屏幕.
但是,我想获得每个监视器的可用区域(即不包括面板).我发现的唯一的东西是_NET_WORKAREA,但这是一个跨越所有显示器的巨大区域.根据分辨率和排列,该区域内可能有面板.
如何获得每台显示器的实际可用面积?理想情况下,仅使用Gtk/Gdk,没有X11特定的.
我正在尝试使用 GTK 创建多线程。需要 Gtk.gdk 但我收到关于没有 gdk 属性的错误。我正在使用带有 Raspbian 的 Raspberry Pi。
这就是我导入 GTK 库的方式。
try:
import pygtk
pygtk.require("2.0")
except:
pass
try:
from gi.repository import Gtk
except:
print("GTK Not Available")
sys.exit(1)
Gtk.gdk.threads_init()
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误。
AttributeError'gi.repository.Gtk' 对象没有属性 'gdk'
任何的想法?
更新:我正在关注本教程http://faq.pygtk.org/index.py?req=show&file=faq14.023.htp ,它同时使用 GObject.threads_init() 和 Gtk.gdk.threads_init()。我使用 GObject 没有问题,但使用 gdk。