小编spe*_*tre的帖子

如何制作正确的只读PyGTK文本条目?

我正在尝试制作一个小部件,其中包含用户应该能够复制的短文本输出,但不能更改.这就是我想出来的:

entry = gtk.Entry()
entry.set_property("editable", False)
entry.unset_flags(gtk.CAN_FOCUS)
Run Code Online (Sandbox Code Playgroud)

它可以工作,但条目看起来仍然是可编辑的,从用户的角度来看这看起来很糟糕.我尝试了entry.set_sensitive(False),但这两者都阻止了复制,并使它看起来完全禁用.

我想知道如何制作一个正确的只读文本条目,该条目显示为灰色但仍处于活动状态.

编辑:是我正在谈论的图像,虽然不是GTK(我在GNOME环境中工作).

编辑2:开始看起来似乎没有正确的方法来使用GTK,如果有人可以确认这一点我会标记问题已解决.

gtk pygtk

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

堆栈分配,为什么额外的空间?

我正在玩一下以更好地掌握调用约定以及如何处理堆栈,但我无法弄清楚为什么main在设置堆栈时会分配三个额外的双字(at <main+0>).它既没有与8个字节对齐,也没有16个字节,所以这并不是我所知道的原因.正如我所看到的,main需要12个字节才能将两个参数设置为func和返回值.

我错过了什么?

该程序是在x86架构上使用"gcc -ggdb"编译的C代码.

编辑:我从gcc中删除了-O0标志,​​它对输出没有任何影响.

(gdb) disas main
Dump of assembler code for function main:
    0x080483d1 <+0>:    sub    esp,0x18
    0x080483d4 <+3>:    mov    DWORD PTR [esp+0x4],0x7
    0x080483dc <+11>:   mov    DWORD PTR [esp],0x3
    0x080483e3 <+18>:   call   0x80483b4 <func>
    0x080483e8 <+23>:   mov    DWORD PTR [esp+0x14],eax
    0x080483ec <+27>:   add    esp,0x18
    0x080483ef <+30>:   ret    
End of assembler dump.
Run Code Online (Sandbox Code Playgroud)

编辑:当然我应该发布C代码:

int func(int a, int b) {
    int c = 9;
    return a + b + c;
}

void main() {
    int x;
    x = …
Run Code Online (Sandbox Code Playgroud)

x86 assembly stack gcc memory-alignment

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

标签 统计

assembly ×1

gcc ×1

gtk ×1

memory-alignment ×1

pygtk ×1

stack ×1

x86 ×1