Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 Pyside和Cython_Visual Studio 2012_Python 2.7_Pyside_Cython - Fatal编程技术网

Visual studio 2012 Pyside和Cython

Visual studio 2012 Pyside和Cython,visual-studio-2012,python-2.7,pyside,cython,Visual Studio 2012,Python 2.7,Pyside,Cython,我已经用pyside编写了一个GUI,但是当我使用Cython和visualstudio编译应用程序时,我遇到了一些问题。此应用程序(exe)每次都会崩溃,并且没有指示是什么导致了它 但是,如果我使用pyexe来制作一个应用程序,那么一切都会顺利进行,并且这个应用程序能够正常工作。Cython和visual studio有什么问题 示例代码 import sys from PySide.QtCore import * from PySide.QtGui import * class Main

我已经用pyside编写了一个GUI,但是当我使用Cython和visualstudio编译应用程序时,我遇到了一些问题。此应用程序(exe)每次都会崩溃,并且没有指示是什么导致了它

但是,如果我使用pyexe来制作一个应用程序,那么一切都会顺利进行,并且这个应用程序能够正常工作。Cython和visual studio有什么问题

示例代码

import sys

from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        layout = QVBoxLayout()
        self.setLayout(layout)

        self.line_edit = QLineEdit()
        layout.addWidget(self.line_edit)

        self.output = QTextEdit()
        layout.addWidget(self.output)

        font = self.output.font()
        font.setFamily("Lucida Console")
        font.setPointSize(10)
        font.setStyleHint(font.Monospace)
        font.setStyleStrategy(font.PreferAntialias)
        self.output.setCurrentFont(font)

        self.line_edit.returnPressed.connect(self.line_edit_text_changed)

        self.output.append("{:<16.4}{:<16.6}".format(10.23, 1235.77265))
        self.output.append("{:<16.4}{:<16.6}".format(10.23, 12.345))
        self.show()

    def line_edit_text_changed(self):
        self.output.append(self.line_edit.text())

app = QApplication(sys.argv)
mw = MainWindow()
app.exec_()
导入系统 从PySide.QtCore导入* 从PySide.QtGui导入* 类主窗口(QWidget): 定义初始化(自): QWidget.\uuuuu初始化(自) layout=QVBoxLayout() self.setLayout(布局) self.line_edit=QLineEdit() layout.addWidget(self.line\u编辑) self.output=QTextEdit() layout.addWidget(self.output) font=self.output.font() font.setFamily(“Lucida控制台”) 字体设置点大小(10) font.setStyleHint(font.Monospace) font.setStyleStrategy(font.PreferAntialias) self.output.setCurrentFont(字体) self.line\u edit.returnPressed.connect(self.line\u edit\u text\u已更改)
self.output.append(“{:好的,下面是我所做的:

我的台词是

signal.connect( self.function )
把它们变成

connector = lambda : self.function
signal.connect( connector )
正如我所知,问题在于Cython如何将函数转换为可从Python调用的C。它与Signal connect用于管理Python和C之间调用的hack不太兼容。因此,我要做的是创建一个Python函数对象(lambda函数)并将其用作Python对象

调用Cython函数是令人高兴的,因为您使用典型的Python语法调用它。连接信号是令人高兴的,因为它有一个普通的Python函数

我使用您的示例对此进行了测试,并使用以下行进行了更改:

con = lambda : self.line_edit_text_changed()
self.line_edit.returnPressed.connect( con )
编辑:为了使我的生活更简单,我还创建了一个函数来处理其中的一些问题

def connect_signal( signal, function ):
    def intermediary( *args, **kwargs ):
        function( *args, **kwargs )
    signal.connect( intermediary )

这可以放在一些常用的文件中,用来代替常用的语法。它适用于Cythonized和non-Cythonized文件。

好的,下面是我所做的:

我的台词是

signal.connect( self.function )
把它们变成

connector = lambda : self.function
signal.connect( connector )
正如我所知,问题在于Cython如何将函数转换为可从Python调用的C。它与Signal connect用于管理Python和C之间调用的hack不太兼容。因此,我要做的是创建一个Python函数对象(lambda函数)并将其用作Python对象

调用Cython函数是令人高兴的,因为您使用典型的Python语法调用它。连接信号是令人高兴的,因为它有一个普通的Python函数

我使用您的示例对此进行了测试,并使用以下行进行了更改:

con = lambda : self.line_edit_text_changed()
self.line_edit.returnPressed.connect( con )
编辑:为了使我的生活更简单,我还创建了一个函数来处理其中的一些问题

def connect_signal( signal, function ):
    def intermediary( *args, **kwargs ):
        function( *args, **kwargs )
    signal.connect( intermediary )

这可以放在一些常见的文件中,用来代替常用的语法。它适用于Cythonized和非Cythonized文件。

我目前遇到一个问题,Python连接信号似乎产生了分段错误。Pyside/Cython似乎有一个bug?…我试着用Cython编译我的应用程序,但有些函数PySide的可选性不起作用。请看,我目前遇到一个问题,Python信号的连接似乎产生了分段错误。PySide/Cython似乎有一个bug?…我曾尝试用Cython编译我的应用程序,但PySide的一些功能不起作用。请看几个月后,我确定了一个非常重要的错误回到这个方法;也就是说,连接的函数没有被正确解构。因为中介是它自己的对象,所以在解构函数时它不会被解构。当一个连接了函数的对象被破坏时,这可能会导致各种问题。我已经将我的项目从Cython迁移出去,所以我没有找到了解决这个问题的方法。几个月后,我发现了这个方法的一个非常重要的缺点,即连接的函数没有被正确解构。因为中介体是它自己的对象,所以在解构函数时它不会被解构。当一个对象我已经将我的项目从Cython迁移出去了,所以我还没有找到解决这个问题的方法。