GTK+プログラミング
VisualStudioだってオプションからディレクトリの設定しなきゃ ビルドすらままならないだろうに、何言ってんだコイツ ましてやコマンドラインからCL.exe呼び出すんなら、vcvarsall.batなり vcvarsall.batで設定される環境変数群を、予めユーザー環境変数に定義して おかなければCL.exeもg++と同じエラー吐いて止まるだろうに・・・ pixmapの背景色を黒くしたキャンバスを作って その上に画像と文字を描画してて、文字は白 これに対してニコ動のコメント表示/非表示みたいなことをやりたい 文字を描画するときのみXORモードで書いてるんだけど 背景の黒の上に書かれた物は消えるけど、画像の上に書かれた 物は黒抜き去れて残ってしまう 説明わかりにくいかも知れないけど、なんか良い方法無いかな GTK+を使って記述されているソフトとしては gimp以外だとどんなものがありますか? ソースリストを読んで勉強したいのですが 2chブラウザのJDとか、画像ヴューアのgqviewとか。 ツールバーにウィンドを表示しないようにするにはどうすればいいの? linux 初心者です。C言語はバリバリです(ウィンドウズで)最近、fedora12 に乗り換え、システムを移植中なんですが、 ウィンドウ関連のところで、GTK+なるものが必要とのこと。そこで、インストールしましたが、 実際のソースコードをコンパイルしてもエラーがでます。 勉強不足の所をご指摘いただけないでしょうか? gtk+ インストール yum -y install gtk+ でインストールしました。 800KBぐらいだったと思います。 そこで、次のコードを emacs でコンパイルします。 #include <gtk/gtk.h> int main( int argc, char *argv[] ) { GtkWidget *window; gtk_init( &argc, &argv[] ); window = gtk_winidow_new( GTK_WINDOW_TOPLEVEL ); gtk_widget_show( window ); gtk_main(); return 0; } すると、error : gtk/gtk.h: そのようなファイルやディレクトリはありません。 その他これに関連するエラーがでます。 gtk/gtk.h が無いのか、と思って、 もう一度 gtk+ をインストールしようとすると、 gtk+-1.2.10-69.fc12.i686 はインストール済みか最新バージョンです 何もしません とでます。 ...よろしくお願いします。 チュートリアルどおりやれば躓かないとおもうんだけどな gtk2, gtk2-develを入れて gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0` >> 401 遅くなりましてすいません。返信ありがとうございます。 うまくいきました。 ウィンドウが表示されたとき、感動しました。 でも、emacs からはコンパイルできませんでしたので、リンカーあたりの 設定かな?と思っています。 何はともあれ、ありがとうございました。 またまたお願いいたします。 linuxにおいて、 windowsの SetCursorPos() GetCursorPos() に相当するものはありますか? 参考リファレンスなど紹介してもらえれば助かります。 >>403 ttp://library.gnome.org/devel/gtk-tutorial/stable/ >>404 返信ありがとうございます。 ...勉強します。 >>402 pkg-configコマンドが何なのか調べるんだ。 はじめまして。GTK初心者です。 困っていることがあります。 gtk_init()でハングするんです。 1. gtk_init()を手動でコール出来るようプログラミングし、rc.localでそのプログラムを起動。 2. xwindow(gnome)ログイン後にgtk_init()をコールさせる。 上記の2の時点でgtk_init()でハングしているらしいです。 (gtk_init()下行のログが出力されない) 原因や対処法をご存知の方いらっしゃいませんか? >>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::::::{ | read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる