GTK+プログラミング
>>583 説明が少なくてすいません。 X86 Linux PCを使って業務用のシステムを作っています。 PCを起動して、OSが立ち上がったあと、自動で以下の処理を行います。 1)USBメモリが接続されているチェックします。 2)もしUSBメモリがマウントできたらファイル(数百Mバイト)をHDDにコピーします。 3)ファイルコピー完了後に、メインの処理を行います。 2)のファイルコピーに時間がかかるため、その間に「しばらくお待ちください」という静止画を フルスクリーンで表示したいんです。1)〜3)の処理はシェルスクリプトで行い、 #!/bin/bash (省略) | 静止画を表示 cp aaa.bin /temp // ファイルコピー 静止画を消す | メインの処理 という感じでやりたいと考えています。 シェルスクリプトでやるのが最適かどうかわからないのですが・・・。 プログラム起動→メッセージ表示→シェル実行→シェルの終了待ち→戻り値確認→終了処理 ではダメなん? >>584 商売でオプソ使うのは止めたほうがいいよ 嫌味で言ってるんじゃなくて、法務的な問題が多すぎてメリット無いって ソースコード開示しろって言われたとき、開示できる仕様なの? 客先とトラブルになっちゃうよ? 止めた方がいいと思うけど >>584 内容了解。俺だったらこんな感じに実装するけどこでどうかな? どうしても一回プロセス自体終了する必要があるのであれば もう少し手を入れないといけないと思う。 スクリプト内のhelloworld.pyは以下のもの http://www.pygtk.org/pygtk2tutorial/examples/helloworld.py #!/bin/bash ${PWD}/helloworld.py & GTKPID=$! sleep 10 kill ${GTKPID} exit >>588 ありがとうございます。 なるほど、そのようなやり方があるのですね。 非同期のプロセスで画像を表示し、 ファイルコピーが完了したら プロセスをkillするということで理解しました。 私の思っていることが出来そうです。 たいへん勉強になりました。 >>587 同僚の仕事を楽にするために、手伝っています。 今回の件のソースは公開しても全然問題ないのですが、 今後は気をつけようと思います。 以上、ありがとうございました。 http://sourceforge.jp/magazine/11/02/14/0318203 2年ぶりのメジャーリリース、「GTK+ 3.0」が登場 2年ぶりって… 訳も適当だし、なんか寂しいリリースだな PyGTKを使っているのですが、TreeViewのデータを更新したいのですがどのようにすればわからず苦しんでおります。 行いたいことは、 TreeViewに(ID,TEXT)というカラムありデータが羅列しています。 そのIDを指定してTEXTの内容を変更したいのですが、どのようにすればいいでしょうか? どうかご教授頂ければと思います。 スレ違いであれば申し訳ないございません。 LinuxでGTK+を使ってアプリを作成しています。 Windowsで言うグローバルホットキーを実装したくて色々調べたのですが該当するページが見つからず途方にくれています。 GTK+にはRegisterHotKey()に当たる関数はないのでしょうか? また、Linuxでグローバルホットを実装する方法があればご提示お願い致します。 >>596 gtk hotkey でググったら、一発ですが探してないの? >>597 すいません、ググり方が少し違ったようで・・・ 「Linux プログラミング ホットキー」などで探していました。 ご指摘頂いたワードで検索した結果なんとか行けそうです。 本当にありがとうございました。 検索って難しいよね。目的の情報に準じた予備知識があって 適切なキーワードを選択できてはじめて探し当てられる。 >目的の情報に準じた予備知識があって あるある。だいぶ知恵ついてくると簡単に検索できるようになるけど、初めての分野だと一向にヒットしない よく初心者スレで「検索しても見つかりませんでした」「○○で検索すればすぐみつかるだろksg」 みたいなやりとり見るけど、正直初心者にはムリだよな…と思ったりもする。放置するけど 今度またググル先生がアルゴリズム変えるらしいけど、こういった点では改善がみられるかなあ… 3.0.0になってLnFはなんか変わった? 右側に0ナンバーが多いものはなんか怖いから、まだ試してない。 質問です。pygtkを使っています。 gtk.TextViewの背景色を変更するにはどのようにすればよいでしょうか? 自己解決しました。 modify_base(state, color)で変更できました。 squeeze gtkmm 2.4 gtkglextmm 1.2 pthread でプログラムを作っているんだけどプログラムの終了 時に以下のエラーが出るようになってしまいました。同じようなエラーを経験した方は居ませんでしょ うか? glibmm-CRITICAL **: Glib::ObjectBase* Glib::wrap_create_new_wrapper(GObject*): assertion `wrap_func_table != 0' failed glibmm-WARNING **: Failed to wrap object of type 'GdkScreenX11'. Hint: this error is commonly caused by failing to call a library init() function. 自己解決しました。何でコンパイルが通るんだ・・・ 誤 Gtk::Main kit( argv, argc ); Gtk::GL::init( argv, argc ); 正 Gtk::Main kit( argc, argv ); Gtk::GL::init( argc, argv ); >>607 試してみたら普通にコンパイルエラーになる。 それと関係無いけど、gtkmmは中々むずいよ… m_act_quit = Glib::RefPtr<Gtk::Action>::cast_static(m_builder->get_object("action1")); m_act_quit->signal_activate().connect(mem_fun(*this, &AppWindow::on_quit_action_activated)); void AppWindow::on_quit_action_activated() { Gtk::Main::quit(); } とあるコードの一片だけど、敷居が高いというかなんというか… そんで今はValaを使ってる。Valaだと↓こんな感じ。 var quit_action = builder.get_object("action_quit") as Gtk.Action; quit_action.activate.connect(() => { Gtk.main_quit(); }); >>609 コンパイルが通る方は適当に作った変数を食わしてたんだけど何故か逆にしてもコンパイルが通る 今は書き直して本物のargc,argvを入れています。 valaか〜・・・ドキュメント多い? Valaは日本語のまとまったドキュメントは皆無だね。 英語だったら本家サイトのドキュメントで困る事はないよ。 最終的にC言語にトランスレートされるんだけど、そのソースを見るのが中々楽しいw gtkで音楽を鳴らすことは出来ますか? どうすればいいでしょうか? 音楽の方はGTKとは関係ないんじゃないかね? とりあえずALSA APIとか調べてみては? すいません windowsでgtk+の開発環境を整えたいのですが参考になるサイトありませんか? 板の名前を100回読読んで最後にサーをつけてみやがれ糞ども >>615 プログラム板にスレがあるよ そっちで聞けば回答がもらえるかもしれない こっちの質問は撤回して向こうへ行くといい >>617 ありがとうございます でも、やっぱりwindowsだと面倒くさそうなのでLinuxでやることにしました そこでまた問題があるのですが (PDF注意) http://www.iim.cs.tut.ac.jp/ ~sugaya/books/GUI-ApplicationProgramming/files/GTK-book-chapter2.pdf ここに載っているサンプルプログラムをコンパイルしたら以下のエラーが出たのですがどうすればいいのでしょうか? package gtk+-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gtk+2.0.pc` to the PKG_CONFIG_PATH environment variable No package 'gtk+-2.0' found image-viewer.c:1:21: fatal error: gtk/gtk.h: そのようなファイルやディレクトリはありません compilation terminated. 環境はUbuntu11.04です >>618 ありがとうございます でも僕Python3をつかってるので・・・ >>619 どうすればいいのでしょうかって、どうすればいいのか自分で貼り付けてるじゃん。 Perhaps you should add the directory containing `gtk+2.0.pc` to the PKG_CONFIG_PATH environment variable あと質問のつもりなら、どのソースをどんな方法でコンパイルしたかくらいは書くべき。 >>620 すいません。以後気をつけます それとパスの通し方がわかりません・・・linuxはあまり触ったことがないので Linuxだと面倒臭くない、という理由だった人間がパスの通し方もわからんとか… 世の中なめてんのか? LinuxでGTK+プログラミングしようって人間が日本語でないとだめって… 世の中なんめてんのか? ごめん俺も英語ダメ 出来るだけ日本語の情報があるとうれしいw >>624 親のすねかじってるお前よりマシだよハゲ ,,,,,,,,,,,,,,,,,,,, /": : : : : : : : \ /-─-,,,_: : : : : : : : :\ / '''-,,,: : : : : : : :i /、 /: : : : : : : : i ________ r-、 ,,,,,,,,,,、 /: : : : : : : : : :i / L_, , 、 \: : : : : : : : :i / Yahoo!翻訳したら /●) (●> |: :__,=-、: / < 負けかなと思ってる l イ '- |:/ tbノノ \ l ,`-=-'\ `l ι';/ \ 英語がだめな24・男性 ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヾ=-' / / ____ヽ::::... / ::::| / ̄ ::::::::::::::l `──'''' :::| GTK以前にOSで躓いてるのか。 だったら分かってるだろうwinでやった方がいいんじゃないの? winはもっと分からないっていうなら仕方ないけど。 プログラミング系の英文を翻訳したらわけが分からなくなる 原文でわけが分からない方がましなくらいにね・・・ それとは別に ID:z2Mrc21j はもっと謙虚になるべき 下地が出来ていないし質問する場所が悪いし何を聞いたらいいか分かっていない気がする 何でパスを通したいのか分からないけど細かい質問はgoogle先生で検索してみるといいかも >>621 パスの通し方はGTKと全く関係ないLinuxの基礎の基礎なので、スレ違いです。 >>619 aptitude install libgtk2.0-dev gcc `pkg-config --cflags gtk+-2.0 --libs gtk+-2.0` image-viewer.c まあ、パスの通し方でからんでるアホも、 同レベルとみなした方が良さそうではあるがな それにしてもスレ違いの質問は認めちゃだめだろw グダグダになるぞw libgtk2.0-devをインストールしてなかったわ コンパイルできた >>634 1. パスの通し方でからんでるアホ 2. スレ違いのグダグダにからんでるアホ 3. >>637 このレス 同レベル。 Gentooを使うとみみっちい*-devパッケージなんかで 悩まされずにすむんだけどなあ HTML5バックエンドにはびびった。 これは、GTK+アプリがサーバーで動いていてクライアントでは<canvas>で 表示しているだけって事かな。 HTML5対応ツールキットとか沢山出てきそうだけど、やっぱりGTK+は最初から 完成度高いものが使えるから、かなりのアドバンテージになるはず。 インストールしなくてもWindows上でGTK+アプリが使える訳だから最高だな。 既存のGTK+アプリケーションを応用したクラウドサービスの予感 GTK+2で、Cairoを用いて一回の描画に非常に時間がかかるもの(例えばマンデルブローとか)を描画して、 GTKのDrawingAreaに表示するにはどうしたらいいんでしょうか? 直接DrawingAreaのGdkwindowにExposeイベント毎に描画するようにすると当然破綻します。 GTK+2だとCairoのSurfaceに描画してそれをPixbufにするというのもできない感じなので困ってます。 GdkPixmapに描画して、ウィンドウ再描画のときはそこから転送する。 むしろGTK+3でGdkPixmapがなくなって、オフスクリーンなpixmapを どうやって持つのか知りたい。 オフスクリーンなGdkWindowというのがあるらしいから それを作ってpixmapとして使えということなのだろうか。 >>642 ありがとうございます。 使ってる言語のバインディングが+2用なので仕方なく+2を使ってますが、今から使うアプリに GdkPixmapは使いたくないので、他に手段ないでしょうか? +2でも、CairoのSurfaceをGdkWindowにコピー?できるのが理想なんですが。 ちなみに、+3では http://developer.gnome.org/gtk3/stable/ch25s02.html#id1407324 によればCairoのSurface使えってことだと思います。 >>643 http://zetcode.com/tutorials/cairographicstutorial/cairoimages/ の「Blind down effect」でできるようですよ 簡単に要約すると 関数cairo_image_surface_createでオフスクリーンなsurfaceを作って、そこに落書きし、 eexposeイベント内で関数cairo_set_source_surfaceを呼び出して落書き結果をコピーするという方法だそうです >>644 ありがとうございます、それでやってみます。 GtkTableにアタッチしたウィジェットのパディングを変更したいんですが gtk_table_attach()を変更の度に呼んでも問題ないですか? それともパティングを手軽に変更できる手段って他にあるでしょうか。 >>647 GtkAlignmentでどうですか? 例えば、GtkButtonのパッディングを変更できるようにしたいなら、 button = gtk_button_new_with_label( "Button 2" ); align = gtk_alignment_new( 0, 0, 0, 0 ); gtk_container_add( GTK_CONTAINER( align ), button ); gtk_table_attach( GTK_TABLE( table ), align , 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0 ); でButtonを登録し、 gtk_alignment_set_padding( GTK_ALIGNMENT( align ), 5, 5, 10, 10 ); で調節します。 >>648 ありがとうございます GtkAlignmentでもパディング変更できましたが GtkTableのchildrenの中の該当ウィジェットを格納した GtkTableChildのx/ypaddingを変更することでもできるようです スレッドA,BにおいてAからBを終了させるpthread_close()に相当する処理を行う方法がgtkには無い。 >>650 お役に立てずにすみません。GtkTableChildを使った方がスマートですね。 ところで、Gtk 2.0のリファレンスにGtkTableChildクラスの説明がみつからないのですが どこにあるか教えていただけませんか? Gtk 1.0のほうは見つけたのですが、Gtk 2.0の方では見つかりません 公式の3.0のリファレンスにも無いですね もしかして直接触っちゃだめなのかもと思ったけど childrenにテーブルの中身がって書いてるしヘッダみろってことなのかも ところで画面解像度の変更やテーマの変更の感知はどのイベントを 受け取ればいいのか教えてください >>654 >>childrenにテーブルの中身がって書いてるしヘッダみろってことなのかも なるほど、そういうことなんですね。 ところで、解像度の変更イベント処理はGdkScreenのsize-changedイベントで処理できます 参考URLは http://www.gtkforums.com/viewtopic.php?p=3643 です。 それとテーマの変更イベントですが、すみませんが僕にはわかりませんでした。 下記のURLによると、テーマ変更時に変化するオブジェクトのイベントを すべて監視すればいいらしいのですが… http://www.gtkforums.com/viewtopic.php?f=3&t=3829&p=10165&hilit=theme+change+event#p10165 >>655 ありがとうございます テーマの方はこんな感じでできそうですね ちょっと試してみます https://garage.maemo.org/plugins/ggit/browse.php/?p=modest ;a=commitdiff;h=5879161f031517a16b4c516e90700b647cb62b1e + g_signal_connect (G_OBJECT (instance), "notify::style", G_CALLBACK (on_notify_style), (gpointer) instance); UbuntuLinuxを使っていると、 ラブハンドルになるスクロールバーとならないスクロールバーがあるんだけど違いはなんなの? >>656 私のほうでも試して見ましたが、 それでテーマ変更イベントの検出はできるようですね。 しかし、notify::styleイベントがgtkリファレンスに見つからないw 何のイベントなんだろう? >>657 ラブハンドルになるアプリ名とならないアプリ名を書けば、 誰かが調べてくれるかも? debhelpを日本語化するプロジェクトはもう立ち上がっているのでしょうか? ttp://mugtug.com/sketchpad/ ↑これ有名なHTML5のデモだけど、 ttp://blogs.gnome.org/alexl/2011/04/18/broadway-update-3/ GTK+3.2がリリースされれば、↑こんな感じに同じ事が出来るようにのか? wktkが止まらない! cairoは死んでしまったのか… Firefoxに見捨てられ更新もほとんど無い >>664 gitのログ見たけど更新しまくってね?リリース見ても5月中にも pycairoとかcairommとかバインディング関係が更新あるしcairo自体は既に成熟期だろ それとIDが惜しい ttp://lists.cairographics.org/archives/cairo-commit/2011-June/thread.html ↑ここ見て少なく感じた。半分近くはコードでないコミットだし。 GtkDrawingArea を自分で XCreateWindow して作りたい時ってどうすればいいか教えてください。 自己解決した。 Gdk.X11Screen.lookup_visual () とか使えば、自分で XCreateWindow () する必要とかなかった。 GtkEntryCompletion のポップアップの最大高さ?を設定する方法おしえてくだしあ http://up3.viploader.net/pc/src/vlpc008412.png デフォだと↑みたいに画面の高さいっぱい一杯までスクロールバーがついたポップアップが表示されてしまいます そんなAPIは無いように見えるから どうしても欲しければ自力でGtkEntryCompletion相当のコードを書くことになるのかなぁ >>670 ありがとうございます。 _GtkEntryCompletionPrivate構造体の定義がわからないので諦めました g_signal_connectでコールバック関数に渡せるデータって一つしかないですよね でもどうしても複数のデータを渡したい時ってどうするんですか? 例えば,main関数内でエントリーが3つとボタンがあって, ボタンを押したら3つのエントリーに入力されている文字列をg_printで出力する場合とか 初歩的な質問かもしれないけど,お願いします >>672 構造体とか使って渡したいデータを1変数にまとめて、 コールバック関数にはその構造体のポインタ渡すのはどうかな http://pastebin.com/UXyRbuJf >>673 ありがとうございます やっぱりそれしか無いですか... なんで可変じゃなくてわざわざ一個だけなんだろうなあ 自分でラッパー書いて、可変引数版のg_signal_connectを自由につくってもいいのよ〜 一般的に複数引数渡すよりポインタ1個渡す方が効率的、と考えられてるんじゃないかな 普通は渡したいデータの型も文字列だけじゃないだろうし、Cだと型が予測できない可変引数を処理するのは面倒だと思う >>675 調べてみると可変引数って色々問題あるんですね,知りませんでした ラッパーって言葉も今知りました 勉強になります >>672 ・そのEntry3つをGHashTable につっこんどいて それをコールバックの引数にする ・そもそもGtkBuilderオブジェクトでつくったUIなら それをcbの引数にする GTK_ENTRY (gtk_builder_get_object (builder, "ボタンの変数名")) で取れる ・前もってそれぞれのEntryにgtk_widget_set_name(entry,"しきべつめい")しといて gtk_container_get_children (GTK_CONTAINER (window)) で取れる GList をcbの引数にする cb関数側でg_list_nth_data つかって先頭からアクセス、gtk_widget_get_name(entry)でとれる名前を確認しながら扱う 三通り思いつきました、どうでしょうか? 2.0用コードを3.0でコンパイルしたら、gdk_pixuf_render_to_drawable()で問題発生しました。 main(){ gtk_init(NULL,NULL); GdkPixbuf* pixbuf; GtkWidget* image; gdk_pixbuf_render_to_drawable( pixbuf, image->window, image->style->fg_gc[GTK_STATE_NORMAL], 0, 0, 0, 0, 100, 200, GDK_RGB_DITHER_NONE, 0, 0 ); } gtk+-3,0でコンパイルすると、image->window, image->style, GDK_RGB_DITHER_NONE、の3箇所がエラーになってしまいます。 だれか解決してください。 3.0の方針として、直接メンバー変数にアクセスしない事になったんで、 それぞれ、set_window, get_window みたいなアクセサ経由に変更すればOK >>678 下記サイト 中段 "GdkDrawable is gone" によると 「GTK+3において GdkDrawable,GdkPixmap,GdkImage は削除された。代わりに cairo_surface_t,GdkPixbuf を使え」 とあります。承知の上での質問でしたらすいません http://developer.gnome.org/gtk3/3.1/ch25s02.html >>677 GHashTableを使うのが一番楽そうですね 参考になりました,ありがとうございました >>679 ,680 どうやらgtk+3は描画の高レベル部分をcairoに置き換えたがってるようなので、 素直にgdkによる描画をcairoで書きなおすことにします。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる