GTK+プログラミング
>>407 突っ込みどころが3点ほど。 ・rc.localに登録して起動し、さらにログインした後にも起動・・・? ・gtk_init()だけ実行するプログラムを作ったの? だとしたら壮大な勘違いをしている。gtk_init()関数が何をする関数なのか調べるんだ。 ・「ログ」とは何のログ?ハングしているらしい、では分からないのでソースをUPするんだ。 >>408 ありがとうございます。すみません、説明不足でした。 ちょっとソースは長いので文書のみで失礼します。 プログラムは、rc.localで起動した時点ではgtk_init()をコールしない作りにしてます。 その後、ログイン後にコンソールから別プログラムを通してプロセス間通信によりコマンドを送信、 そしてコマンドを受信した時点で gtk_init()をコールさせる形にしてました。 ログは、 printf("call gtk_init\n"); gtk_init(); printf("call end\n"); ★ のようにして、★が出力されない感じです。 その後の調査で、どうやら rc.local起動させた場合、環境変数 DISPLAYなどが 全く設定されていないようです。 そこら辺に問題有りかと思っているのですが、なにぶん、勉強不足でして。 時間も無いので質問させて貰った次第です。 DISPLAYも何も、Xの起動はrc.localより後なんだぜ? プログラム分けるんじゃ駄目なんかい 時間も無いので 時間も無いので 時間も無いので 時間も無いので 時間も無いので >>409 「GTK初心者」と言うよりLinux&プログラミング初心者のようですね。 貴方にGTKはまだ早いです。環境変数やXの基本が理解できていないと 説明されても分からないと思いますので出直してきて下さい。 >>410 ありがとうございます。 inittabで初期化レベルを分けていることもあり、 てっきりrc.local前に起動処理が走っているかと勘違いしていました。 お恥ずかしい。 >>412 おっしゃるとおりです。 出直してきます。 >>414 DISPLAYが設定されてなくて、Widget使わないなら、 GObject関係を使うためだけなら、g_type_init ()すれば良いよ。 有名なエラーが出るからgtk_init()使ったってエスパーしてみた。 書籍「入門GTK+」のP31のプログラムを打ち込み、何度も確認したのですが、どうしても下記のエラーが出てしまいます。 何が間違っているのか、ご教示願います。 gtk-sample.c: In function ‘create_menu’: gtk-sample.c:64: error: ‘acitons’ undeclared (first use in this function) gtk-sample.c:64: error: (Each undeclared identifier is reported only once gtk-sample.c:64: error: for each function it appears in.) gtk_action_group_add_actionsの値でエラーが出るようです。関係する記述を確認しましたが問題ありません… エラーメッセージを読んでみましょう acitonsが宣言されていませんよ actionsと間違えていませんか? >417さん ごめんなさい、本当に気づきませんでした。エラー文を読んでいたのに…ありがとうございました gtkmmをこれからやってみようと思ってるけど、 入門GTK+を読みながらC言語で練習するより 最初からgtkmmでC++使ったほうがいい? gtkmmの入門書がないみたいなので、 取っかかりとして入門GTK+を候補にしてるんだけど…。 >>420 最終的にC++で書くのが目的なら、↓みたいなところがあるからC++で書けばいいんじゃない。 gtkまわりの日本語の情報が少ないから、言語は違うけどたまに参考にさせてもらってるよ。 http://book.geocities.jp/gtkmm_ja/docs/tutorial/html/index.html GTK+ 1.2 で作った古いツールを 2.0 で動くように手直ししてるんですが、とりあえず Makefile の中で # GTK+ 1.2 CFLAGS = `gtk-config --cflags` LIBS = `gtk-config --libs` # GTK+ 2.0 CFLAGS = `pkg-config --cflags gtk+-2.0` -DGTK_ENABLE_BROKEN -DGTK_WINDOW_DIALOG=GTK_WINDOW_TOPLEVEL LIBS = `pkg-config --libs gtk+-2.0` てな感じでお茶を濁して動かしているんですが、ソースを全面的に 2.0 対応するコストって どれほどでしょうか? 150本ほどのちまちましたツールがあって、2.0 で起こしたツールが2割程度、後の8割は、 前記のとりあえずリビルドです。 ちょっと自前で描画しようとすると、gdkとcairoが混在していて 煩雑としてるなぁ。 少なくともGDKの描画関連のAPIはもういらないだろう。 3.0辺りでばっさり消すとかしてもいいんじゃないか。 GTK(+glade)を使ったあるプログラムを ・HP-UXサーバ ・RedHat Linuxサーバ でそれぞれコンパイルおよび動作させ、 別のLinux端末に表示させたところ、 表示や動作自体は問題無いんだけども、 エディットボックスへの入力で RedHat Linuxの方は日本語入力を受け付けてくれません。 ちなみに、それぞれに入っているGTKはともに1.2です。 SCIMとかの環境は、一見同じっぽいですが・・・・ どこか見るべき箇所はあるでしょうか? ちなみに、glade自体も HP-UXは日本語入力を受け付けてLinuxサーバの方は 日本語入力を受け付けてくれません。 gladeの問題なんですかねぇ・・・? Gtk::Dialogの派生クラスを作成してある条件の時表示させています。 表示後一定期間経過したら自動的にそのダイアログを閉じたいのですが、 どうすればいいのでしょうか。 特にダイアログにこだわっているわけではありません。 何かメッセージを表示 -> 一定時間後に自動的に消去 が実現できればいいです。 よろしくお願いします。 >>427 g_timeout_add関数ではだめでしょうか? gtk_widget_drawを呼ぶとたまにアプリが落ちる 調べたらgtk2では非推奨になってた かわりにgdk_window_invalidate_rect使えって書いてあったから それ使うようにしたら、exposeイベントハンドラに入ったり入らなかったりするようになった Xawで作られたソフトのWidgetをGnomeテーマのスキンっぽく 変える方法ってありますか?Xaw3dみたいな >>427 作ってみた。たぶん、427はここを見てないだろうけど #include <gtk/gtk.h> gboolean timeout(gpointer data){ gtk_dialog_response( GTK_DIALOG(data), GTK_RESPONSE_ACCEPT ); return FALSE; }; int main (int argc, char **argv){ guint tag; GtkWidget *dialog; gtk_init (&argc, &argv); dialog = gtk_dialog_new_with_buttons ("My dialog", NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); tag = g_timeout_add_seconds( 2, timeout, dialog ); gtk_widget_show_all (dialog); gtk_dialog_run(GTK_DIALOG(dialog)); g_source_remove(tag); return 0; } あるデータファイルをどんどん読んで処理しながら、1秒に1回その途中経過を Windowに表示する、みたいなプログラムを書こうとしています。 Windowに表示する部分は、gtk_main()を呼ぶ前に、g_timeout_add(1000, draw, NULL) のようにしてタイムアウト関数を使えばいいとして、データファイルを読み込んで 処理する部分は、どこに書けばいいのでしょうか? スレッドとかを使わずにやりたいのですが。 LinuxでGTK+やってる人はWindowsでも主にGTK+で書いてる? WindowsのAPIは使いませんって人いるのかな。 >>433 スレッドを使わない方がめんどくさいと思うんだけどね。 ずーっと処理し続けて一秒に一回描画するって事だと その処理の間は入力受け付け無くてもOK? その為のスレッドなんだけどなぁ。 シングルCPUでもそう言うことが出来るのがスレッドの良いところ。 それでもスレッドを使いたくないというなら、こまめにシグナル飛ばしっこ するしかないと思う。 簡単なシミュレーション用のGUIラッパ作りたんですが、 Qt4とgtkmmどっちが作るの楽ですか? どっちもバグてんこ盛りそうで、javaやM$畑に生まれたかった >>438 マジでバグテンコ盛りだからいまからでも上にJava+Swingあたりでやらせてくれって掛け合ったほうがいい。 ちゃんと上にQtもGTK+もバグテンコ盛り過ぎてプロダクションレベルに使えないって直訴するんだぞ。 >>438 vala とかどうか。バグが多いかどうかはプラットフォームに よる部分も多いと感じるが…win ならC#で組むのが楽だとは思う。 なんでこのスレ、ム板じゃないの? SDLとかはちゃんとム板でやってるのに なんでGTKはのけ者なの? いじめに合うの? >>433 g_idle_add関数がいいかも。 >>435 WindowsでもGTK+を利用してるけど、必要ならWinAPIも利用するよ ちないに、LinuxのGTK+とWindowsのそれとは挙動がちがうことがあるから 注意が必要 以前ここで質問してご教示いただいた事を参考にして、 縦書きビューワーを作ってみました。 ぽち*ろぐ: ぽちたて 0.1.0 をリリースしました ttp://pochimaru.seesaa.net/article/150542330.html Xサーバーのdepth=15bit下において以下のコードで色がおかしくなります。(例えば白がマゼンタぽくなる)firefox,gimp上やdisplay -window root では正常に見えます。 こちらの書き方が正しくないのでしょうか?それともgdk-pixbufの15bitでの処理が正しくないのでしょうか16,24bitでは正常に見えます。 (xorg-server-1.7.1,gtk+-2.21.0) #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h> int main(int argc,char *argv[]){ Display *dpy; int scr; Window root; int depth; GC gc; GdkPixbuf *pixbuf; gint imgw,imgh; dpy = XOpenDisplay(NULL); scr = DefaultScreen(dpy); depth = DefaultDepth(dpy,scr); root = RootWindow(dpy,scr); gc = DefaultGC(dpy,scr); g_type_init(); gdk_pixbuf_xlib_init_with_depth(dpy,scr,depth); pixbuf=gdk_pixbuf_new_from_file(argv[1],NULL); imgw=gdk_pixbuf_get_width(pixbuf); imgh=gdk_pixbuf_get_height(pixbuf); gdk_pixbuf_xlib_render_to_drawable(pixbuf,root,gc,0,0,0,0,imgw,imgh,XLIB_RGB_DITHER_MAX,0,0); gdk_pixbuf_unref(pixbuf); return 0;} gdk-pixbufの新しいバージョンとソースくらは確認できるだろ? またgdk-pixbuf分離したのかめんどくせえな ValaでGTK+ vs C++でQt の構図に持って行きたい。 いやいや、Valaは良い言語だよ。 実行時に余計なライブラリとか要らないし。 gtkbuilder対応もうれしいですね。 > vala クリックする度に画像を切り替えようとして以下のようにしたところ、 2枚目の画像は表示されませんでした。 2枚目の画像を表示するには他にどのような処理が必要でしょうか? #!/usr/bin/ruby require 'gtk2' window = Gtk::Window.new window.signal_connect("destroy") {Gtk.main_quit} image = [] image[0] = Gtk::Image.new("test.s/sample7.jpg") image[1] = Gtk::Image.new("test.s/sample8.jpg") i=0 event_box = Gtk::EventBox.new event_box.add(image[0]) event_box.events = Gdk::Event::BUTTON_PRESS_MASK event_box.signal_connect("button_press_event") { event_box.remove(image[i]) i += 1 i %= 2 event_box.add(image[i]) } window.add(event_box) event_box.realize event_box.window.cursor = Gdk::Cursor.new(Gdk::Cursor::HAND1) window.show_all Gtk.main >>461 event_box.add(image[i]) event_box.show_all とか gtkでサブディスプレイにウィンドウを表示するのはどうやればいいんでしょう? メインがlocalhost:0.0でサブがlocalhost:0.1になってます。 それはX用語(GTK+でも)でスクリーンというので GtkWindowのscreenプロパティに表示したいgdkScreenを入れるんじゃないかな? GTK#なのですが、.NETのWinFormsでいう、 SuspendLayout() と ResumeLayout() はどうすればいいでしょうか? 質問です。 GtkBuilderで定義したウィンドウを複数表示するにはどうすればいいでしょうか? 一つだけだったら、gtk_builder_get_objectで取得して簡単に表示出来ます。 >>466 GtkBuilder を複数生成すればいいんじゃないの? 自分がよくやるのは、GtkBuilder を複数生成して gtk_builder_add_from_string で定義を取り込み Gtkビルダー?マイクソソフトのC++ビルダーみたいな感じか? と思って検索しようと思ったが堪えた >>467 ありがとう。その方法でやってみる。 >>468 GtkBuilderは、以前のlibgladeにあたるもの。 それに、C++BuilderはMSじゃないぞ。 >>469 もちろん、Glade使ってXMLを作成してるよ。 それを読み込むのがGtkBuilder。 cairoを使って書かれたゲームとかありますかね? 簡単なものでいいのですが >>471 http://uproda.2ch-library.com/299097YiT/lib299097.c ダウンロードするとlib299097.cというファイルが出来るからこれをgccでコンパイルすればいい コンパイルはディレクトリを移動してから gcc lib299097.c -o cairo_game `pkg-config --cflags --libs gtk+-2.0` と入れれば通るだろう ./cairo_game でゲーム開始だ gtkmm使ってもなんか書きにくい Python使ったら楽かな >>473 余程のものじゃない限り、性能的に問題とはならないと思うから、スクリプトは便利だよ。 まぁ、俺は ruby なんだけど。。。 PythonならC++並みに開発環境整備されているし、Ubuntuのアプリも多くが Python + gtk で開発されているよ。 gtkの開発するなら圧倒的にpython、としか言えんだろこのスレじゃ 「PerlとPythonならどっちがいいですか?」 「CだろJK」 ぱねぇっす! やっぱハッカーのひとはぱねぇっす!! ruby 以外のバインディングの事を知らずに書くけど、今時はどの言語でも GtkBuilder を使えるだろうし、 どの言語がいいか何て、自分にどの言語が合ってるか次第なんじゃないの? >>481 C/C++ 以外では、 gtkが公式にサポートしているのがPython Gnomeの公式アプリに使われているのがPython UbuntuやFedoraでデフォルトでインストールされているのがPython Anjuta等GTK系開発ツールのサポートが一番充実しているのがPython >>482 おぉ、Python は gtk で公式にサポートされてるんだ。 それは、いいねぇ。 ruby も入れてくれんかな。 何でみんなPythonが好きなんだ? 忠誠を誓ってるGoogle様が使ってるから、好きなふりをしてるだけか? そうはいっても本当はPerlが大好きなんだろ? Perlは3日たったら自分の書いたコードでも解読に苦労することがある。 Pythonは30分チュートリアルを読むだけで他人の書いたコードでもスラスラ読めることが多い。 / ,' i | | ! | | i | | i | | | | | | | | 」_ . :| | | | : : : :|: : │ i . :| . :| 「 { l:. . : . : . :| │ │ : :|: : i _ノ: : : : ヽ、: :|: : : : |: : : : :/ }| | |: : : : : : :| 〈::| │: : 斗‐ 「 │: : : : :.:.| 「:.T ー-|- : : :| l|. l lヘ: : : : : :| まあ、いやらしい。 \:::L_」─‐-ンt云、└─- -┘ ィ乏ァ-.、─-:l l. | ', ヽ: : : : | r.、:、:::∧ l∧イ;::::}` ´{;イ:;::::::}ヾ| } l l } 〉: : : :| | |:::::::::ヘ 弋;r:ユ 辷_;:r:.ソ l/ | | |,/: : : : :| | {、:::::::: ', ´  ̄ / /│:. : : :| ヽ ヾ::::::::::! " " " "/ ノ:.: : : : l |ヘ ヽ::::::}、 、 / /: : : : : : : ', |: :ヽ \::::`:.、 ヽ_フ / /: : : : : : : : : : ヽ |: :.:ィ\ \:::::::丶、 { /|_,.-‐'" ̄ \: ヽ / |: : :ヽ `ー==:≧ 、_ イ| / /:::::::/ ヽ:.} / l: : : :| 人:::::::::::| l:.:/:::::::/ ヽ | ヽ: : l /、  ̄ ̄| l/:::::::/ | | ∨ /::::::: ̄ ̄ | |::::::/ | | / /::::::::::::::::::::::| l::::::{ | GTK+を使ってプログラムを作ると、MacOSXでボロボロな結果になるから使わないほうがいい。 位置づけとは微妙 pythonは、VBAほど腐ってはいないぞ ところでVBAの近代化って進んでいるのか? Access VBA甘グラマ供の再利用は由々しき問題ぜよ VBAも.netが使えるっぽいから、近代化進んだんじゃないの? >>491 どう考えてもGTKが悪いのではなく糞マックが悪いと思うんだが。 >>493 そうなの? ttp://www.microsoft.com/japan/msdn/vba/ なんて2003年でとまってんだけど、更新が。 >>496 [HOWTO] Microsoft Office で Visual Basic for Applications から Visual Basic .NET クラス ライブラリを呼び出す方法 http://support.microsoft.com/kb/317535/ja こういう事が出来るらしい。 けど一般的じゃないっぽいね。 まぁ互換性失われるし一般的にはならないように感じられるな… >>494 GTK+がマルチプラットフォームになるように吸収するんだろ? だったら、Macは悪くない。 かと云って、「GTK+が悪い」と云うのはおこがましい。 文句云っていいのは、それ相当のものを作れる人だけだ。 >>498 「同じようなモノをつくれるひとでなければ批評してはいけない」というのなら ・linuxの○○の部分が悪いといっていいのはOS開発者だけ ・ゲームの○○が面白くないといっていいのはゲーム開発者だけ ・携帯電話の○○が使いづらいといっていいのは端末開発者だけ ・新作映画のストーリーラインを批判していいのは映画監督だけ そういうのって言論封殺っていわない? オープンソース風土とはだいぶ違う文化じゃない? osxのgtk+ってx window版とネイティブ版とあるんじゃなかったっけ? Windows7でも見た目が最悪になるからな。 MacOSXみたいに日本語入力ができないとか絶望的ってほどではないが。 Pythonバインドでも同じ問題って起こるの? 今日からPython勉強してGUIなアプリを作ってみようと思っていたのだが・・。 Qtのほうがいいのかな。でも、GNOME使ってるしGtkがいいんだよな そんなあなたにPythonでもC++でもPerlでもokの wxGlade http://wxglade.sourceforge.net/ はどうかな? 残念だが、日本語云々の話はWindows1.0のレベルにも達していないというのが現実。 開発体制の問題だろうね。 酷いと思うけどさすがに1.0はないだろ それに日本語(2バイト文字)関連はGtkよりQtのが酷いしマシな方 GtkTreeView内のテキスト(gtk_cell_renderer_text_newで設定したもの)がカラムの幅を超えたら自動的に折り返して次の行に表示するようにできませんかね? 現状はカラムの幅を超えた部分は消えてしまいます。自分で改行を入れた場合は次の行に表示されるので折り返しも出来そうな気はするのですが。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる