小编Jul*_*ian的帖子

Python QT(PySide)QPushButton样式表导致"断言'GTK_IS_WIDGET(窗口小部件)'失败"错误

每次我尝试将样式表应用到QPushButton时,我都会收到错误:

(python:21347): Gtk-CRITICAL **: IA__gtk_widget_get_direction: assertion 'GTK_IS_WIDGET (widget)' failed". 
Run Code Online (Sandbox Code Playgroud)

错误出现两次,但程序仍然运行正常,样式表似乎正确应用.这是仍然产生错误的最小代码:

import sys
from PySide import QtGui

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    wid = QtGui.QWidget()
    layout = QtGui.QVBoxLayout()
    button = QtGui.QPushButton("Button")
    button.setStyleSheet("QPushButton { color: black }")
    layout.addWidget(button)
    wid.setLayout(layout)
    wid.show()

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

注释掉button.setStyleSheet可以消除错误消息.如果它有所作为,我将使用repo中的库在Xubuntu 13.10下运行它.

这个错误显然不是一个严重的问题,因为代码运行时没有遇到麻烦,但我真的想摆脱错误信息!

python gtk qt pyside

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

Cython快速将二进制字符串转换为int数组

我有一个大型二进制数据文件,我想将其加载到 C 数组中以便快速访问。数据文件仅包含 4 字节整数序列。

我通过 pkgutil.get_data 函数获取数据,该函数返回一个二进制字符串。以下代码有效:

import pkgutil
import struct

cdef int data[32487834]

def load_data():
    global data
    py_data = pkgutil.get_data('my_module', 'my_data')
    for i in range(32487834):
        data[i] = <int>struct.unpack('i', py_data[4*i:4*(i+1)])[0]
    return 0

load_data()
Run Code Online (Sandbox Code Playgroud)

问题是这段代码非常慢。读取整个数据文件可能需要 7 或 8 秒。将文件直接读入 C 中的数组只需 1-2 秒,但我想使用 pkgutil.get_data 以便我的模块无论安装在何处都可以可靠地找到数据。

所以,我的问题是:最好的方法是什么?有没有办法直接将数据转换为整数数组,而不需要对 struct.unpack 进行所有调用?而且,作为第二个问题,有没有一种方法可以简单地获取指向数据的指针,以避免不必要地复制 120MB 的数据?

或者,有没有办法让 pkgutil 返回数据的文件路径而不是数据本身(在这种情况下,我可以使用 C 文件 IO 来快速读取文件。

编辑:

仅供记录,这是最终使用的代码(基于 Veedrac 的答案):

import pkgutil

from cpython cimport array
import array

cdef int[:] data

cdef void load_data():
    global data
    py_data = pkgutil.get_data('my_module', …
Run Code Online (Sandbox Code Playgroud)

python arrays distutils cython

0
推荐指数
1
解决办法
2390
查看次数

标签 统计

python ×2

arrays ×1

cython ×1

distutils ×1

gtk ×1

pyside ×1

qt ×1