我正在使用PyQtPython,并且正在构建一个 gui。几周前我遇到了一个问题,我在 gui 模块之外有一个函数来修改 gui 中的小部件(高级进度条、更新字符串等),并且这些修改在 gui 中没有反映出来,直到函数完成更改完成运行。
对此的解决方案是app.processEvents()在进行我想要的任何修改后简单地调用,这将立即更新窗口的图形。
但现在我想知道,有没有办法在每次窗口提前时做到这一点?
假设我调用了一个将修改进度条的函数,但该函数需要很长时间才能运行。在调用函数和修改进度条之间,app进程没有事件。所以,在这段时间里,我拉起一个 Chrome 窗口(或其他任何东西),然后关闭它,我的 gui 窗口是空白的,只是灰色的,直到app.processEvents()再次被调用。
是否有什么功能PyQt允许我检测窗口何时被带到所有当前窗口的前面?
使用Inkscape时,我不断收到错误消息,似乎暗示没有满足python 2 vs 3的期望,尽管我都安装了它们。例如,当我尝试制作从模板生成的新文档时,我得到了,
Traceback (most recent call last):
File "empty_generic.py", line 82, in <module>
c.affect()
File "/usr/share/inkscape/extensions/inkex.py", line 285, in affect
self.output()
File "/usr/share/inkscape/extensions/inkex.py", line 272, in output
self.document.write(sys.stdout)
File "src/lxml/lxml.etree.pyx", line 2033, in lxml.etree._ElementTree.write (src/lxml/lxml.etree.c:63667)
File "src/lxml/serializer.pxi", line 524, in lxml.etree._tofilelike (src/lxml/lxml.etree.c:134877)
File "src/lxml/lxml.etree.pyx", line 324, in lxml.etree._ExceptionContext._raise_if_stored (src/lxml/lxml.etree.c:10737)
File "src/lxml/serializer.pxi", line 441, in lxml.etree._FilelikeWriter.write (src/lxml/lxml.etree.c:133581)
TypeError: write() argument must be str, not bytes
Run Code Online (Sandbox Code Playgroud)
最后一行似乎正是我所说的-通常此错误是由使用python 3解释器运行python 2代码引起的,并且可以通过简单地将字符串对象str as str.decode()或其他形式传递来解决。但是,显然,编辑inkscape源代码不是理想的解决方案。
此外,当尝试生成Voronoi图时,我得到
Traceback (most recent call last):
File "voronoi2svg.py", …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的模板函数来比较rank两个字段structs:
template<typename T>
bool comp_rank(const T &a, const T &b){
return a.rank < b.rank;
}
Run Code Online (Sandbox Code Playgroud)
这很好,直到我编译-std=c++11.现在,我收到了错误
error: parameter "b" is not a type name
return a.rank < b.rank;
^
./src/util.h(123): error: expected a ">"
return a.rank < b.rank;
^
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?这似乎是基本的语法,我惊讶地发现在C++ 11之后发生了变化.
假设我正在查看一个包含年份标题的网页,例如"StackOverflow 2016".有没有办法,通过检查页面源,找出这个字符串是变量(函数每年自动更新它),或者它是否是硬编码字符串?
文档对此非常模糊.如果我read()多次调用C 函数,我必须传递一些我希望每次都读取的字节.但我怎么知道起始指数是什么?例如:
n = read(fd, *buffer, 10)
n2 = read(fd, *buffer, 10)
第一次调用read会读10个字节,而文件描述符的文件fd到buffer.但是当我再次调用它时,它会读取完全相同的东西,还是会读取接下来的 10个字节?我真的认为这没有意义,但我认为无法定义所需的起始索引.
我想知道std::sortin 的实现c++11.我有一个MPI管理并行代码,其中每个级别将文件中的数据读入A需要排序的向量中.每个等级都要求std::sort这样做.
当我以约100个等级运行时,有时会有一个等级挂起来std::sort.最终,我意识到,它并没有悬挂,排序只需要很长时间.也就是说,一个等级的排序时间比所有其他等级长约200倍.
起初我怀疑这是一个负载平衡问题.不,我已经彻底检查了A每个等级的大小是否尽可能平衡.
我已经得出结论,可能只是因为一个等级具有初始条件,A使得诸如快速排序的最坏情况性能之类的东西被实现(或者至少是非理想情况).
为什么我这么想?
MPI配置(从而扰乱A每个级别的内容,因为它来自文件读取),问题就会消失,或者它可以移动到其他级别.std::sort改为std::stable_sort(不再使用快速排序算法),那么一切都很好.但是,似乎通过在每次迭代中选择随机轴点来实现快速排序是最明智的.如果是这种情况std::sort,则绝大多数情况下不可能从A多次迭代中随机选择最坏情况值(这将导致200倍的性能损失).
因此,我的观察建议std::sort实现固定的快速分配枢轴值(例如,总是选择数组中的第一个值,或类似的东西).这是我所看到的行为可能的唯一方式,并且在重新运行相同MPI配置时也能提供一致的结果(它确实如此).
我的结论是否正确?我确实设法找到了std源代码,但是sort函数完全不可读,并且对各种辅助函数进行了大量调用,而我宁愿避免使用兔子洞.除此之外,我正在使用HPC系统,我甚至不清楚如何确定mpicxx链接到底是什么.我找不到任何描述算法实现的文档