【发布时间】:2017-09-07 22:26:07
【问题描述】:
为什么在 DrawingArea 小部件上调用 set_size_request(800,600)(也使用 Gtk.Button 测试)会产生大小为 958 x 791 像素的窗口,而在窗口上调用 set_default_size(800,600) 会产生适当大小的窗口(如测量值)通过只截取窗口的屏幕截图并查看它的分辨率)?由于窗口标题栏,我会理解高度是否会有一点差异,但是宽度和高度的这种差异对我来说没有意义。该文档没有暗示任何类似的东西。如果有人能启发我,那就太好了!
这是一个用 vala 编写的代码示例:
using Gtk;
using Cairo;
public class SizeTest : Gtk.Window {
public SizeTest () {
this.title = "Size test";
this.destroy.connect (Gtk.main_quit);
//set_default_size (800, 600); // Window size -> 800 x 600 px
var drawing_area = new DrawingArea ();
drawing_area.set_size_request (800, 600); // Window size -> 958 x 791 px
add (drawing_area);
}
static int main (string[] args) {
Gtk.init (ref args);
var test = new SizeTest ();
test.show_all ();
Gtk.main ();
return 0;
}
}
@Zongren Zhang,感谢您的测试。我又试了一次,把它分成两个应用程序,就像你做的那样。两个窗口的大小对我来说完全不同。我在我的两台显示器上都试过了——同样的事情。
顺便说一句,我使用的是elementary OS 0.4.1 Loki,安装的libgtk-3-0版本是3.18.9。
【问题讨论】:
-
AFAIK Gtk 不对窗口的初始大小做出任何承诺;如果您没有设置初始大小或任何几何提示,则初始大小可以是任何值。这可能取决于您的窗口管理器。
-
但最让我困惑的是 800x600 像素(这是屏幕上的实际物理像素,对吧?!)似乎与 Window 不同,与 DrawingArea 不同。当设置为窗口的默认大小时,它的屏幕截图就具有该分辨率。另一方面,当我将其设置为 DrawingArea 的大小时,绘制为 799,599 的正方形恰好在右下角可见,而 0,0 处的对象位于左上角。窗口大小会调整,当然是为了适应绘图区,但现在窗口在两个方向上都大了 150 像素以上。
-
@Rawing 我想我明白了!你是对的,设置窗口的默认大小并不能保证它真的以那个大小显示。谢谢你的提示!尽管不同的默认窗口大小会导致不同的实际大小,但它一直在愚弄我。它从来都不是合适的尺寸。屏幕截图工具进一步愚弄了我;D。在 Gimp 中打开屏幕截图,我意识到窗口周围有透明空间。它必须以某种方式获取默认大小,截取窗口的屏幕截图,然后使分配给窗口但未被窗口使用的空间透明。