2014-08-27 2 views
1

Учитывая следующий код питона, он должен создать GtkAdjustment со значением 123.Python3, GTK3, значение регулировки случайным образом меняется

Он (видимо, случайно) получать различные значения. Либо значение 123.0 минимальное значение 1.0, либо 0.0 (Константа, а не параметр).

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

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

Что происходит?

Edit: Следующая программа C действует, как и ожидалось, так что специфические для питона:

#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. Что бы вы выбрали? –

+0

Не обращая внимания на эту конкретную проблему, я всегда поддерживаю аргументы ключевого слова, потому что они документируют, что происходит. – matthias

+0

Нет конкретных проблем, возникающих в связи с назначением значений один за другим вместо использования собственного конструктора? –

Смежные вопросы