小编Ant*_*ala的帖子

如何让Tkinter支持PNG透明度?

我在Tkinter中放入了一个部分透明的PNG图像,我得到的就是这个

替代文字http://i26.tinypic.com/aelh82.jpg

如何使右侧的黑色三角形清晰?(就像它应该的那样)

这是Windows 7上的python 2.6,顺便说一句.

python png transparency tkinter

13
推荐指数
1
解决办法
3万
查看次数

使用KeyboardInterrupt异常捕获SIGINT在终端中工作,而不是在脚本中

我试图SIGINT在Python 2.7程序中捕获(或键盘中断).这就是我的Python测试脚本的test外观:

#!/usr/bin/python

import time

try:
    time.sleep(100)
except KeyboardInterrupt:
    pass
except:
    print "error"
Run Code Online (Sandbox Code Playgroud)

接下来我有一个shell脚本test.sh:

./test & pid=$!
sleep 1
kill -s 2 $pid
Run Code Online (Sandbox Code Playgroud)

当我使用bash或sh或其他东西运行脚本时,bash test.shPython进程test保持运行并且无法使用SIGINT.而当我复制test.sh命令并将其粘贴到(bash)终端时,Python进程test将关闭.

我不知道发生了什么,我想了解.那么,差异在哪里,为什么?

这不是关于如何捕获SIGINTPython!根据文档 - 这是应该工作的方式:

Python默认安装少量信号处理程序:SIGPIPE ...和SIGINT转换为KeyboardInterrupt异常

这的确是追赶KeyboardInterruptSIGINT被发送kill,如果该程序是由外壳直接启动,但是当程序从后台运行bash脚本开始,似乎KeyboardInterrupt永远不会提高.

python bash shell sigint

13
推荐指数
1
解决办法
5669
查看次数

C未定义的行为.严格别名规则或错误对齐?

我无法解释这个程序的执行行为:

#include <string> 
#include <cstdlib> 
#include <stdio.h>

typedef char u8;
typedef unsigned short u16;

size_t f(u8 *keyc, size_t len)
{
    u16 *key2 = (u16 *) (keyc + 1);
    size_t hash = len;
    len = len / 2;

    for (size_t i = 0; i < len; ++i)
        hash += key2[i];
    return hash;
}

int main()
{
    srand(time(NULL));
    size_t len;
    scanf("%lu", &len);
    u8 x[len];
    for (size_t i = 0; i < len; i++)
        x[i] = rand();

    printf("out %lu\n", f(x, len));
}
Run Code Online (Sandbox Code Playgroud)

因此,当使用带有gcc的-O3编译并使用参数25运行时,它会引发段错误.没有优化它工作正常.我已经对它进行了反汇编:它正在进行矢量化,并且编译器假定 …

c gcc strict-aliasing memory-alignment

13
推荐指数
3
解决办法
2368
查看次数

在C中是malloc(256)和malloc(sizeof(char)*256)等价吗?

我看到人们经常编写C代码,例如:

char *ptr = malloc(sizeof(char)*256);
Run Code Online (Sandbox Code Playgroud)

这真的有必要吗?标准说,sizeof(char)==1根据定义,只写这样有意义:

char *ptr = malloc(256);
Run Code Online (Sandbox Code Playgroud)

谢谢,Boda Cydo.

c malloc pointers sizeof

12
推荐指数
2
解决办法
8885
查看次数

为什么不能使静态数组的大小变量?

可能重复:
我们可以给静态数组的大小一个变量

我在其中一个子文件中定义一个数组,如下所示.

static int arr[siz];
Run Code Online (Sandbox Code Playgroud)

siz是子文件可用的全局变量.但是gcc编译器会产生以下错误:

<filename>: <line_num> : error : storage size of ‘arr’ isn’t constant
Run Code Online (Sandbox Code Playgroud)

为什么我不能定义一个static可变大小的数组?

编辑:这似乎只是static int类型的问题.如果我将变量类型arrfrom 更改static intint,则错误消失,即使数组的大小仍依赖于变量siz.

c arrays static gcc

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

C++使用函数作为参数

可能重复:
如何在C中将函数作为参数传递?

假设我有一个叫做的函数

void funct2(int a) {

}


void funct(int a, (void)(*funct2)(int a)) {

 ;


}
Run Code Online (Sandbox Code Playgroud)

调用此函数的正确方法是什么?我需要设置什么才能让它工作?

c++

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

什么是__signature__和__text_signature__在Python 3.4中使用

如果dir()在CPython 3.4上对某些内置可调用对象(类构造函数,方法等)进行处理,则会发现其中许多通常具有一个特殊属性__text_signature__,例如:

>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None
Run Code Online (Sandbox Code Playgroud)

但是,此文档不存在.此外,谷歌搜索属性名称表明还有另一个可能的特殊属性__signature__,但我没有找到任何内置函数.

我知道它们与函数参数签名有关,但除此之外,它们的值表示什么以及它们的用途是什么?

python signature python-internals python-3.4

11
推荐指数
2
解决办法
1643
查看次数

为什么新样式类和旧样式类在这种情况下有不同的行为?

我找到了一些有趣的东西,这里有一段代码:

class A(object):
    def __init__(self):
        print "A init"

    def __del__(self):
        print "A del"

class B(object):
    a = A()
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,我会得到:

A init
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改class B(object)class B(),我会得到:

A init
A del
Run Code Online (Sandbox Code Playgroud)

我在__del__ doc中找到了一个注释:

无法保证为解释器退出时仍然存在的对象调用del()方法.

然后,我想这是因为当解释器存在时B.a仍然引用(由类引用B).

所以,我del B在解释器手动存在之前添加了一个,然后我发现它a.__del__()被调用了.

现在,我对此感到有些困惑.为什么a.__del__()在使用旧样式时调用?为什么新旧风格的行为有不同的行为?

我在这里发现了类似的问题,但我认为答案还不够明确.

python python-2.x python-3.x python-internals

11
推荐指数
1
解决办法
279
查看次数

Python主要版本升级后自动将软件包重新安装到虚拟环境中

我的磁盘上有几个虚拟环境(几十个),由venvPython 3.6 模块制作。现在我匆忙升级到 Ubuntu 19.10,后来才注意到 Ubuntu 19.10 根本不可用 3.6 从公认的来源。通过定位在我的主目录下并在包含的文件夹上运行,我设法升级了这些虚拟环境的Python 版本bin/python3python3.7 -mvenv --upgrade

现在,虽然python3.7 -mvenv --upgrade在虚拟环境中升级 Python,但lib/python3.7/site-packagesvenv. 我想我可以通过安装Python 3.6,已经这样做了pip freeze荷兰国际集团从需求venv,然后VENV升级到Python 3.7,pip install -r荷兰国际集团-只要有Python的3.6安装可用于我的新的操作系统。

有没有其他方法可以以相当自动化的方式(也许主要是pip freeze使用旧lib/python3.6目录)来做到这一点,而我不必从源代码安装 Python 3.6、使用 conda 或从一些随机 PPA 安装 3.6?我想整体升级所有环境,以便将来当我需要对随机环境执行某些操作时,它将继续使用 Python 3.7。

python python-3.x python-venv

11
推荐指数
1
解决办法
548
查看次数

是否可以在具有删除效果的控制台中显示文本?

我已经查看了ANSI转义码,但看起来只支持下划线.

我想念一些东西还是有其他选择?

如果不可能,那么"这是否已被弃用"的含义是否相同?

terminal console text ansi-escape strikethrough

10
推荐指数
2
解决办法
5310
查看次数