我想在linux(fedora 12)下使用GTK 3创建一个窗口,并使用cairo-gl后端在其上绘制一个简单的矩形,为此我想创建一个cairo-gl表面.我怎么能这样做,任何人都可以帮我提供示例代码.
提前致谢.
RC7
我有以下代码,使用pygtk:
attr = pango.AttrList()
attr.change(pango.AttrSize((
50 * window_height / 100) * 1000, 0, -1))
attr.change(pango.AttrFamily("Sans", 0, -1))
attr.change(pango.AttrWeight(pango.WEIGHT_BOLD, 0, -1))
attr.change(pango.AttrForeground(65535, 65535, 65535, 0, -1))
self.label.set_attributes(attr)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将它移植到pygobject,但没有类Pango.AttrFamily,既没有Pango.AttrWeight,也没有Pango.AttrForeground(我无法实例化Pango.AttrSize).
现在的问题是:如何使用pango_attr_size_new
,pango_attr_weight_new
,pango_attr_family_new
和pango_attr_foreground_new
通过instrospection?
我知道我可以使用标记来做到这一点,但是1.使用属性可以使事情更简单2.我想知道这里发生了什么!我已经花了很多时间试图解决它.
我在Python 3中有一些RGBA数据,我想在不使用任何额外库的情况下在GTK3窗口中显示它所代表的图像.
我尝试的第一件事是编辑一个Pixbuf
例子中的数据(http://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-The-GdkPixbuf-Structure.html#put-pixel - 对不起,我使用时,(C)文档中只允许2个链接Pixbuf.get_pixels()
.这给了我一个不可变的bytes
对象,但显然不会起作用.(gdk-pixbuf错误报告(668084,如果SO允许我将链接到它)涵盖相同的功能,但事情必须改变一点,因为.)
接下来,我尝试使用数据创建一个Pixbuf Pixbuf.new_from_data()
,但这也是错误的(参见gdk-pixbuf bug 674691)(是的,那是评论3中的我).
然后我看了一下Cairo:ImageSurface.create_for_data
应该这样做,但由于某种原因,这在Python 3绑定中还没有.(我已经尝试过使用Python 2,然后将表面转换为a Pixbuf
,然后将其包装在一个中gtk.Image
,它可以工作.但我使用的是Python3(即便如此,它也很混乱 - 毕竟Cairo是一个矢量图形库) ).
我找到了一个参考,使用PIL将图像写入PNG文件,然后将其读入Pixbuf,但这很糟糕,使用额外的库,而PIL也不适用于Python 3.
那么......还有其他方法吗?
根据Havok的回答,这是一个有效的例子:
from array import array
from gi.repository import Gtk as gtk, GdkPixbuf
pixels = array('H')
for i in range(20):
for j in range(20):
px = (i < 10, j >= 10, (i < 10) ^ (j < 10))
pixels.extend(65535 * c for c in px)
header = b'P6 …
Run Code Online (Sandbox Code Playgroud) 在GTK 3中,人们可以设置自己的主题.甚至默认主题(Adwaita)也提供两种变体:浅色和暗色.当我正在编写自己的小部件(在python中)时,我需要获取这些颜色以避免在黑色或白色上绘制黑色.
如何访问用户GTK主题的默认颜色?
GtkSettings
用于提供可接受的gtk-theme-color
属性,但它不再存在,并且在文档中没有引用来解释如何替换它.因为原始的颜色在某处.原则上,我没有看到为什么我应该被迫间接访问它.
而且,如果因为你敢在某处删除单个标签而导致程序崩溃,你会如何反应?如果改变单个标签的颜色实际上改变了其他完全不相关的小部件的颜色,你会如何反应?
我不想要这种惊喜.
在Ubuntu 18.04上使用Hugo和AWS CLI时遇到此问题。
ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (failed to map segment from shared object): ignored.
Run Code Online (Sandbox Code Playgroud)
这是Ubuntu 18.04,Hugo和AWS CLI的全新安装。
我用gtkmm3用c ++编程.我想在程序中更改一些字体.我阅读了关于CssStyleProvider,gtkmm文档中的StyleContext以及gtk + documentaion的所有内容,但我无法使其工作,也找不到任何关于它的教程.我是这样想的
Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
asd2->add_provider(asd, 0); /*also tried different priorities*/
Run Code Online (Sandbox Code Playgroud)
也尝试过那样
Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gdk::Screen> screen;
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
(mainWindow.get())->get_property("screen", screen);
asd2->add_provider(screen, asd, 0); /*also tried different priorities*/
Run Code Online (Sandbox Code Playgroud)
我在运行主窗口之前尝试了这些,然后运行它但我没有运气.任何帮助表示赞赏.
我刚刚使用Gtk3 for GUI开发了一个Python 2.7应用程序.我的问题是,我现在如何为Windows,Mac和Linux(可能是三个不同的安装程序)创建一个安装程序,以便我的最终用户轻松下载应用程序,而无需下载python和GTK等.
我以前从未从python脚本创建过安装程序.我听说有一些工具用于此目的(py2exe?pyinstaller?),但我不知道如何以及如何打包它们以便它能够使用Gtk3.
我自己一直在学习GTK3,现在我被困在Gtk.DrawingArea上了.与GTK中的大多数小部件和功能一样,似乎缺乏关于此的更新文档和教程.关于我发现的内容(希望这将有助于其他一些失去的googlers)的参考,lazka的自动生成的文档是我最好的资源:
http://lazka.github.io/pgi-docs/Gtk-3.0/classes/index.html
但是,绘图区域页面没有描述的方法.
http://lazka.github.io/pgi-docs/Gtk-3.0/classes/DrawingArea.html
这让我相信我对GTK和这个小部件有一个根本的误解,但我找不到任何解释如何使用它的东西!我能找到的唯一教程是这些,但它们都适用于旧版本;
3是这些教程中最好的,但我似乎无法在GTK3中使用它,老实说它非常先进.有些事情也被弃用,替换似乎非常神秘,并且不清楚它们如何与DrawingArea一起工作:http: //lazka.github.io/pgi-docs/Gtk-3.0/classes/Widget.html#Gtk.Widget. set_style
官方教程没有关于它的部分,并且在很长一段时间内没有显着更新:
http://python-gtk-3-tutorial.readthedocs.org/en/latest/objects.html
https://github.com/sebp/PyGObject-Tutorial
我现在的问题是,是否有人可以帮助我了解如何使用Gtk.DrawingArea绘制?那里有gtk3教程吗?
我目前的目标是根据算法的输出自动在绘图区域绘制黑点,并显示结果.我会展示我的代码,但我几乎没有任何东西.
我需要将GNU/Linux(Arch Linux)中的GTK +应用程序交叉编译到Windows.我已经尝试过使用mingw32
,但它没有看到所有库(包括c的标准库!).所以,我需要:找到标准的库; 找到所有其他(glib,gio,gtk等)库.但是有一个问题 - 我找不到它们.我也无法从Windows编译.我必须做什么?
我在GTK 3应用程序中收到以下警告:
Gtk-WARNING**:在
__main__+MCVEWindow 0000000004e93b30
不调用gtk_widget_get_preferred_width/height()的情况下分配大小.代码如何知道要分配的大小?
当Gtk.ScrolledWindow
包含Gtk.TreeView
附加到网格时,会发生警告,网格本身附加到网格上,gtk.ApplicationWindow
并且有足够的元素供滚动条实际显示.如果没有足够的元素使其可滚动,则不会出现警告.
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk as gtk
class MCVEWindow(gtk.ApplicationWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._tree_view = gtk.TreeView()
self._tree_view.set_hexpand(True)
self._tree_view.set_vexpand(True)
self.populate_tree_view() # populate tree view with fake items
window_column = gtk.TreeViewColumn(
"Window", gtk.CellRendererText(),
text=0
)
window_column.set_resizable(True)
handle_column = gtk.TreeViewColumn(
"Handle", gtk.CellRendererText(),
text=1
)
class_column = gtk.TreeViewColumn(
"Class name", gtk.CellRendererText(),
text=2
)
self._tree_view.append_column(window_column)
self._tree_view.append_column(handle_column)
self._tree_view.append_column(class_column)
scrolled_tree_view = gtk.ScrolledWindow()
scrolled_tree_view.add(self._tree_view)
toolbar = gtk.Toolbar()
expand_tree_view_button = gtk.ToolButton(icon_name="list-add") …
Run Code Online (Sandbox Code Playgroud)