如果Polygon的任何段相交,则Shapely将Polygon定义为无效,包括colinear的段.许多软件包将创建一个带有"切口"的区域或区域,如此处所示,其具有共线段(图像):
>>> pp = Polygon([(0,0), (0,3), (3,3), (3,0), (2,0),
(2,2), (1,2), (1,1), (2,1), (2,0), (0,0)])
>>> pp.is_valid
WARNING:shapely.geos:Self-intersection at or near point 2 0
False
Run Code Online (Sandbox Code Playgroud)
自然地,剪切可以在Shapely中原生实现,或者这个相同的几何体可以实现为两个有效的多边形,但是如果我只有上面显示的点列表,那么就很容易"修复"这个(从中创建有效的几何体)点数清单)?
某些小部件允许我这样做:
self.widget.clicked.connect(on_click)
Run Code Online (Sandbox Code Playgroud)
但做:
self.widget.keyPressEvent.connect(on_key)
Run Code Online (Sandbox Code Playgroud)
将失败说该对象没有属性'connect'.
我知道对窗口小部件进行子类化并重新实现该keyPressEvent
方法将允许我响应该事件.但是,如何.connect()
从用户上下文中获取键盘事件或以其他方式说出来?
我有这个Verilog代码的问题.基本上,它不会让我做Y = 3'di
声明.基本上,我想要Y
平等i
.我很确定问题是i
.那么,有没有办法在Verilog中做到这一点?此外,W
是一个8位输入(换句话说,W[7:0]
).
for (i = 7; i >= 0; i = i - 1)
begin
if(W[i]) Y=3'di;
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在尝试在a的不同列上显示对象的属性Gtk.TreeView
.说我有以下内容:
class MyClass(GObject.GObject):
def __init__(self, first, last, age):
self.first = first
self.last = last
self.age = age
Run Code Online (Sandbox Code Playgroud)
我想将实例存储在Gtk.ListStore
如下所示的a中.
store = Gtk.ListStore(MyClass)
Run Code Online (Sandbox Code Playgroud)
现在,在创建时Gtk.TreeView
,我不知道如何指定必须呈现2列,一个用于first
属性,另一个用于age
属性.
view = Gtk.TreeView(model=store)
# Columns for first and age added here
...
Run Code Online (Sandbox Code Playgroud)
这些帖子(1)和(2)在某种程度上解释了如何使用自定义类型,但只使用1列(然后store
匹配列数的长度与列中的列数view
).我听起来像我想做的事情是一件普通的事情而不需要任何解决方法.也许它是关于子类化Gtk.ListStore
让它告诉view
它有几列以及如何获取每个值?
另外,我如何制作以便对MyClass实例中的更改进行store
自动通知并反映在view
?
我需要在运行时更改对另一个函数内的函数的调用.
请考虑以下代码:
def now():
print "Hello World!"
class Sim:
def __init__(self, arg, msg):
self.msg = msg
self.func = arg
self.patch(self.func)
def now(self):
print self.msg
def run(self):
self.func()
def patch(self, func):
# Any references to the global now() in func
# are replaced with the self.now() method.
def myfunc():
now()
Run Code Online (Sandbox Code Playgroud)
然后 ...
>>> a = Sim(myfunc, "Hello Locals #1")
>>> b = Sim(myfunc, "Hello Locals #2")
>>> b.run()
Hello Locals #2
>>> a.run()
Hello Locals #1
Run Code Online (Sandbox Code Playgroud)
一个用户编写代码,myfunc()
调用全局定义的函数now()
,我无法编辑它.但我想让它调用 …
那么我应该在我的程序开始时运行什么来使其成为线程安全的(或者我在某些地方读过的线程感知):
from gi.repository import Gtk, Gdk, GLib, GObject
import threading
GLib.threads_init() # ?
GObject.threads_init() # YES!
Gdk.threads_init() # ?
my_app()
def my_threaded_func():
Glib.idle_add(lambda: some_gui_action())
Glib.timeout_add(300, lambda: some_gui_action())
t = threading.Thread(target=my_thread_func)
t.daemon = True
t.start()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
然后,我应该在我的线程中做什么?某种锁?使用Python的线程库是安全的还是我应该在GLib,GObject或Gdk中使用某些东西?我知道那里有很多问题/答案/例子,但它们都相互矛盾,不是Gtk + 3,不适合Python,或者只是不完整,甚至我认为是Python GI的正式文档(http ://lazka.github.io/pgi-docs/)甚至没有提到GObject.threads_init()和Gdk.threads_init()的存在.
在这个简单的PyQt演示程序中,我从主线程发出信号.在工作线程中我连接到它们,但信号处理程序在主线程中运行:
from PyQt4 import QtGui, QtCore
import threading
from time import sleep
import sys
class Data():
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return "Data having %d and %d" % (self.a, self.b)
class Worker(QtCore.QThread):
def __init__(self, parent):
QtCore.QThread.__init__(self)
self.p = parent
def run(self):
self.connect(self.p, QtCore.SIGNAL("newTask"), self.task)
print "[%s] running exec_()" % threading.currentThread()
self.exec_()
def task(self, dataobj):
print "[%s] Processing" % threading.currentThread(), dataobj
sleep(3)
print "Done with", dataobj
self.emit(QtCore.SIGNAL("taskDone"), str(dataobj))
class App(QtCore.QObject):
def __init__(self):
QtCore.QObject.__init__(self)
self.w …
Run Code Online (Sandbox Code Playgroud)