2014-08-27 45 views
1

鉴于以下Python代码,它应该创建一个GtkAdjustment与123Python3,Gtk3,调整值随机地改变

据(显然随机地)得到不同的值的值。值为123.0最小值1.00.0(常数,不是参数)。

#!/usr/bin/python3 
from gi.repository import Gtk 

adjustment = Gtk.Adjustment(123,1,200,1,10,0) 
print(str(adjustment.get_value())) 

这是怎么回事?

编辑:下面的C程序作为预期的,所以它是针对Python:

#include <gtk/gtk.h> 
#include <stdio.h> 

int main(int argc, char *argv[]){ 
    gtk_init (&argc, &argv); 

    GtkAdjustment * adjustment = gtk_adjustment_new(123.0,1.0,200.0,1.0,10.0,0.0); 
    printf("%f\n", gtk_adjustment_get_value(adjustment)); 

    return 0; 
} 

回答

3

的问题是,您使用的是通用的构造。用C术语,它首先用g_object_new构造对象,然后逐个设置值。显然,这不会以确定性的顺序发生。

更好的方法是使用关键字参数的值修正为名称

adjustment = Gtk.Adjustment(value=123, lower=1, upper=200, ...) 

或使用具有的参数的固定顺序

adjustment = Gtk.Adjustment.new(123, 1, 200, 1, 10, 0) 
+0

我认为通用构造的实际构造函数*被映射到真正的构造函数。 TIL。你会选择哪一个? – 2014-08-27 15:45:01

+0

无视这个特殊问题,我总是赞成关键字参数,因为它们记录了发生了什么。 – matthias 2014-08-27 16:25:12

+0

是否没有具体的问题,而不是使用正确的构造函数逐个赋值? – 2014-08-27 17:21:47