小编jpc*_*cgt的帖子

修复无效的多边形| Python身材匀称

如果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中原生实现,或者这个相同的几何体可以实现为两个有效的多边形,但是如果我只有上面显示的点列表,那么就很容易"修复"这个(从中创建有效的几何体)点数清单)?

python geometry shapely

29
推荐指数
3
解决办法
2万
查看次数

PyQt连接到KeyPressEvent

某些小部件允许我这样做:

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()从用户上下文中获取键盘事件或以其他方式说出来?

python events signals-slots pyqt4

8
推荐指数
2
解决办法
2万
查看次数

在Verilog中将整数分配给reg

我有这个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)

谢谢.

verilog

7
推荐指数
1
解决办法
5万
查看次数

带有多个列的GtkTreeView和带有单个自定义类型的GtkListStore(在Python中)

我正在尝试在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

python gtk pygtk gtk3

5
推荐指数
1
解决办法
1284
查看次数

在Python中更改运行时对函数的引用

我需要在运行时更改对另一个函数内的函数的调用.

请考虑以下代码:

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(),我无法编辑它.但我想让它调用 …

python bytecode introspection

5
推荐指数
1
解决办法
596
查看次数

Python GTK + 3安全线程

那么我应该在我的程序开始时运行什么来使其成为线程安全的(或者我在某些地方读过的线程感知):

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()的存在.

python multithreading gtk3

4
推荐指数
1
解决办法
4606
查看次数

PyQt | 信号未在QThread中处理,但在主线程中处理

在这个简单的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)

pyqt qthread

4
推荐指数
1
解决办法
3578
查看次数