時間を表示するアプリケーションを作成したい(最終的には、既存のスマートミラーAPIを使用せずに自分のシンプルなスマートミラーをハックしようとしています)。私はUI用にGTK3を使用していますが、UIアップデートを行うための解決策を見つけ出すのに問題があります(私はフロントエンドやGTKの経験がありません)。GTKのインタフェースを更新する
私は、以下に示すview3コードの一部の周りにループを配置しようとしましたが、gtk_main()が呼び出されるとgtkメインループから出ることができないので、whileループが開始され、私が書いた機能。
私はgtk_main_iteration_do(gtk_false())のような関数を使用しようとしましたが(ブロックされないようにfalse)、これらの関数については十分理解していません。ループからgtk_main()を離しておくと、明らかにgtk_main()は呼び出されず、アプリケーションウィンドウも開かれません。
私が書いたget_time_string()関数の定義の下で、以下のmainに関連するコードを示しました。 get_time_stringの
int
main (int argc,
char *argv[])
{
// initialization and setting up window, packing widgets, etc
// view3
// populate buffer with time string
// and insert into text view
view3 = gtk_text_view_new();
gtk_widget_set_name(view3, "view3");
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view3));
gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
gtk_text_buffer_insert(buffer, &iter, get_time_string(), -1);
gtk_text_view_set_editable(GTK_TEXT_VIEW(view3), FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view3), FALSE);
// More widget packing, setting up UI
gtk_widget_show_all(window);
gtk_main();
return 0;
}
定義()
char* get_time_string(){
time_t time_var = time(NULL);
struct tm *info;
char *time_string = calloc(100, sizeof(char));
info = localtime(&time_var);
strftime(time_string, 100, "%I:%M %p", info);
return time_string;
}
HeyJosé、あなたは 'get_time_string'で割り当てられた文字列のメモリを漏らしています。もう一つの問題は、 'g_timeout_add_seconds'は本当に正確ではなく、ドキュメンテーションは' 'タイマーの最初の呼び出しが1秒のタイムアウトに対して正確ではないことに注意してください。したがって、500msのサンプリングを伴う 'g_timeout_add'は同じ時間が例えば2秒間表示されるのを避けるべきです。 – liberforce
@libforceあなたは正しいです、私の悪いです。フィードバックをお寄せいただきありがとうございます。ではごきげんよう! –
De nada、tenhaum bom dia;) – liberforce