2014-08-27 46 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