Okey们提出了关于asyncio和Gtk +的问题.如何在Gtk.main循环中运行下面的代码?我搜索了一些例子但找不到任何东西.
#!/usr/bin/python3.4
import asyncio
@asyncio.coroutine
def client_connected_handler(client_reader, client_writer):
print("Connection received!")
client_writer.write(b'Hello')
while True:
data = yield from client_reader.read(8192)
if not data:
break
if 'EXIT' in data.decode():
print("Closing server")
break
print(data)
client_writer.write(data)
print('Server is closed')
loop = asyncio.get_event_loop()
Server=asyncio.start_server(client_connected_handler, 'localhost', 2222)
server=loop.run_until_complete(Server)
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)
哦,我应该用gbulb写下我的经验.首先,我使用pip3搜索它.我发现它并试图安装它但由于链接不好而失败(我使用超级用户进行安装).接下来我从他们的存储库下载并安装它.我得到了这个例子我运行它并在其核心模块中缺少参数时出现了一些错误.我不知道它是什么错误导致我从不同的PC写这个我会更新是尽快的.如果其他人可以测试它,我将不胜感激.
我最近用gnome-terminal安装了Lubuntu 16.04.我喜欢gnome-terminal在显示器上占用更少的空间.但是最新版本的右上角有两个恼人的按钮,这对我来说毫无意义.因为,喜欢终端的用户更有可能使用键盘快捷键来执行标签操作,而不是点击鼠标.使用这两个额外的按钮,标签栏变得更宽,并在显示器上占用更多空间.点击此处查看截图 .请帮我从gnome-terminal窗口中删除这两个额外的按钮.
提前致谢
Madhusudhan
我想在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.我想知道这里发生了什么!我已经花了很多时间试图解决它.
我有一个小应用程序,使用a DrawingArea
来绘制一个简单的地图使用PyGObject
和GTK3
.
我加载一个Pixbuf
使用
from gi.repository import Gtk, GdkPixbuf
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size("logo.png", 25, 25)
Run Code Online (Sandbox Code Playgroud)
然后尝试在DrawingArea
绘制事件信号中绘制它
def draw(self, widget, context):
window = widget.get_window()
ctx = window.cairo_create()
ctx.set_source_pixbuf(pixbuf, 0, 0)
Run Code Online (Sandbox Code Playgroud)
但我收到错误信息
"AttributeError: 'cairo.Context' object has no attribute 'set_source_pixbuf'"
Run Code Online (Sandbox Code Playgroud)
如果我正确阅读Gtk2到Gtk3迁移指南,这应该可行.我究竟做错了什么?
我在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) 据我所知,从版本3.4开始,GTK +增加了多点触控支持.我不清楚的是这是否仅适用于手机/平板电脑等触摸屏,还是适用于Apple风格的触控板(Ubuntu/Unity和OS X在触控板上使用多点触控手势的方式).
我也很难找到如何实现手势以及如何跟踪多点触控事件的示例.
有没有关于如何使用GTK(或类似Clutter之类的东西)实现多点触控的好例子?
在GTK 3中,人们可以设置自己的主题.甚至默认主题(Adwaita)也提供两种变体:浅色和暗色.当我正在编写自己的小部件(在python中)时,我需要获取这些颜色以避免在黑色或白色上绘制黑色.
如何访问用户GTK主题的默认颜色?
GtkSettings
用于提供可接受的gtk-theme-color
属性,但它不再存在,并且在文档中没有引用来解释如何替换它.因为原始的颜色在某处.原则上,我没有看到为什么我应该被迫间接访问它.
而且,如果因为你敢在某处删除单个标签而导致程序崩溃,你会如何反应?如果改变单个标签的颜色实际上改变了其他完全不相关的小部件的颜色,你会如何反应?
我不想要这种惊喜.
当然,我的应用程序没有错误,但是如果它包含任何底部值,我想放入一个通用异常捕获器,它至少会弹出一个消息框告诉用户要报告什么类型的错误.因为我正在使用gi-gtk,我认为初始化后的任何异常都会从Gtk.main
函数内部发生,所以我的main
函数的结尾看起来像这样:
let executeProgram =
catch Gtk.main $ \e -> do
reportThisBugDialog $ show (e :: SomeException)
-- Code here to try to recover to a known good state
executeProgram
executeProgram
Run Code Online (Sandbox Code Playgroud)
我也使用Reactive Banana以防相关,但这不在FRP代码中.
但是,这不会捕获任何异常.我输入error "Test Exception"
了"Help About"的处理程序,我的程序刚退出并在控制台上打印了一条消息(我的用户当然不会看到).
当我对代码响应GTK信号时,如何捕获代码中发生的异常?
在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的全新安装。