每次我尝试将样式表应用到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下运行它.
这个错误显然不是一个严重的问题,因为代码运行时没有遇到麻烦,但我真的想摆脱错误信息!
我有一个大型二进制数据文件,我想将其加载到 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)