我有一个图像/ pixbuf,我想绘制到gtk.DrawingArea并经常刷新,所以blitting操作必须快.这样做很简单:
def __init__(self):
self.drawing_area = gtk.DrawingArea()
self.image = gtk.gdk.pixbuf_new_from_file("image.png")
def area_expose_cb(self, area, event):
self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
Run Code Online (Sandbox Code Playgroud)
然而,导致性能非常慢,可能是由于pixbuf不是显示器颜色格式.
我也没有在开罗取得成功,因为它似乎仅限于24/32位格式,并且没有16位格式(FORMAT_RGB16_565不受支持和弃用).
在Gtk +中快速绘制图片有哪些替代方案?
我有很多年开发PHP Web应用程序的经验,最近也开始深入研究Python.最近我一直对进入桌面应用程序感兴趣,但在该领域绝对没有经验.我看过很少关于PHP-gtk的文章,并想知道它是否真的是一个很好的领域.
我真正想要的是能够快速开发一些体面的中小型应用程序,并能够在Linux和Windows中部署它们.Python或PHP中的东西会很棒(但如果它有很大的优点,我会很高兴学到别的东西).
你们推荐什么?
谢谢
我正在尝试这个剧本: PY WYSIWYG
它说我需要Gtk和WebKit.我想这就是我需要的:
所以我下载了WebKit,但我得到了一个文件夹,而不是安装程序或安装信息.我将它移动到python文件夹中,或者我该怎么办?
我有一个PyGTK应用程序,需要加载未知大小的图像,但我遇到的问题是,如果图像非常大或非常小,窗口布局变得扭曲和难以使用.我需要一些方法使图像自动缩放以适合其父窗口小部件.不幸的是,经过一些研究后,似乎没有代码,内置或其他方式,可以完成我正在寻找的东西.
我怎么能写点什么呢?我原本以为有人会为此编写一些代码; 有什么我错过了吗?
如何gtk.Entry在gtk.TreeViewColumn标题/标题中使小部件可聚焦或可编辑?我试过这个:
# Create tree-view.
treeview = gtk.TreeView()
#...
# Create column.
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn(None, renderer, text=0)
# Set column header.
header = gtk.VBox()
title = gtk.Label("Column")
header.pack_start(title)
filter = gtk.Entry()
#...
header.pack_start(filter)
header.show_all()
column.set_widget(header)
# Add column
treeview.append_column(column)
Run Code Online (Sandbox Code Playgroud)
但是列标题中的Entry小部件不可编辑且不会聚焦.我已经尝试将'clickable'设置为True和False.我在Ubuntu 10.04上使用pygtk 2.21.0-0ubuntu1和libgtk 2.22.0-0ubuntu1.任何帮助将不胜感激.
编辑:
问题源于GtkTreeViewColumn标头的显示方式.标题小部件放在GtkAlignment其父级是GtkHBox其父级是GtkButton其父级最终的父级GtkTreeView.该GtkButton是拦截和阻止我GtkEntry被聚焦和接收鼠标输入.
我正在尝试在OSX 10.6(雪豹)上安装PyGTK.我已经关注了这个话题PyGTK for Mac OS X在哪里?.
当我运行最后一个命令时:
~/.local/bin/jhbuild build meta-gtk-osx-python
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
*** Checking out gtk+ *** [10/18]
*** Configuring gtk+ *** [10/18]
autoreconf -fis && ./configure --prefix /Users/smu/gtk/inst --libdir '/Users/smu/gtk/inst/lib' --with-gdktarget=quartz --disable-static
libtoolize: putting auxiliary files in `.'.
libtoolize: linking file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: linking file `m4/libtool.m4'
libtoolize: linking file `m4/ltoptions.m4'
libtoolize: linking file `m4/ltsugar.m4'
libtoolize: linking file `m4/ltversion.m4'
libtoolize: linking file `m4/lt~obsolete.m4'
configure.in:150: error: possibly undefined macro: dnl
If this token and …Run Code Online (Sandbox Code Playgroud) 我希望能够在我的gtk.Menu中放置一个gtk.ProgressBar,但由于菜单只需要gtk.MenuItems及其子类,我所做的就是采用一个普通的gtk.MenuItem并尝试添加我的进度条作为一个孩子.由于gtk.MenuItem是gtk.Bin的子类,因此它应该能够容纳任何小部件.
例:
menu = gtk.Menu()
item = gtk.MenuItem()
button = gtk.ProgressBar()
button.pulse()
button.show()
item.add(button)
item.show()
menu.append(item)
Run Code Online (Sandbox Code Playgroud)
没有pygtk抱怨,这运行得很好.但是,我的进度条根本没有显示:

如果我用gtk.Label替换进度条,它就显示得很好.
现在问我的问题:
如果您在GTK中有一个子窗口并且想要以编程方式关闭它(例如,按下保存按钮或转义键),是否有一种关闭窗口的首选方法?
例如,
window.destroy()
# versus
window.emit('delete-event')
Run Code Online (Sandbox Code Playgroud) python的一大优点是能够对方法和函数进行内省.举个例子,要获得函数签名,math.log你可以(在ipython中)运行:
In [1]: math.log?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function log>
Namespace: Interactive
Docstring:
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
Run Code Online (Sandbox Code Playgroud)
并查看该功能的参数x和可选项base.
使用新的gtk3和自动生成的pygobject绑定,我可以在所有示例中尝试只获取(*args, **kwargs)每个gtk方法的参数.
示例:Label.set_text 需要一个字符串:
In [1]: from gi.repository import Gtk
In [2]: mylabel = Gtk.Label("hello")
In [3]: mylabel.set_text?
Type: instancemethod
Base Class: <type 'instancemethod'>
String Form: …Run Code Online (Sandbox Code Playgroud) 
我想构建一个上下文菜单,其中包含用于选择日期的菜单项.(用例是在树视图中选择一组项目,然后为所有项目设置新的截止日期.)
由于menuitem是Gtk.Bin,我可以指定任何小部件来代替标签.但是,我似乎无法与小部件进行交互.如果我单击菜单上的任何位置,菜单项将获得单击.因此,我无法选择特定日期,也无法导航数月或数年.如何让日历获取鼠标活动?
此外,日历外部还有外部填充物,当悬停在日历上时会变成橙色.如何删除填充和/或不执行橙色突出显示?
#!/usr/bin/env python
import gobject
import pygtk
pygtk.require('2.0')
import gtk
import time
class ContextMenu(gtk.Menu):
def __init__(self):
gtk.Menu.__init__(self)
def add_calendar_submenu_item(self, text, callback, uuids, data=None):
calendar = gtk.Calendar()
calendar.show()
calendar_item = gtk.MenuItem()
calendar_item.add(calendar)
calendar_item.show()
submenu = gtk.Menu()
submenu.append(calendar_item)
submenu_item = gtk.MenuItem("%s..." %(text))
submenu_item.set_submenu(submenu)
submenu_item.show()
submenu_item.connect("activate", self.on_calendar_activate)
self.append(submenu_item)
def on_calendar_activate(self, widget):
print "activate"
if __name__ == "__main__":
class CalendarExample:
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Calendar Example")
window.set_border_width(5)
window.set_size_request(200, 100)
window.set_resizable(False)
window.stick()
window.connect("destroy", lambda x: gtk.main_quit())
menu = ContextMenu()
menu.add_calendar_submenu_item("date", …Run Code Online (Sandbox Code Playgroud)