我正在尝试制作一个小部件,其中包含用户应该能够复制的短文本输出,但不能更改.这就是我想出来的:
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,如果有人可以确认这一点我会标记问题已解决.
我正在玩一下以更好地掌握调用约定以及如何处理堆栈,但我无法弄清楚为什么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)