GTK+プログラミング
3Dデスクトップをデフォルトにする方向性はやめてほしい。 Vista も KDE4 も総スカンだろ? CPUのクロックが頭打ちなんだから、プログラマは節制しないと。 CPUのクロックが頭打ちだからこその3D描画だろ GPUにやらせたほうが描画は速い ※適切な3Dドライバがある場合に限る オイラは、普段非力なマシンばかり扱っているから3Dをすると重くてかなわん! GTK+3が出ても当分は、GTK+2を使うよ。 「入門GTK+」を参考にすれば、jpgやgifのイメージビュ-ワが簡単に作れるし 動作も軽いからね。 因みに我が家での、 「入門GTK+」を参考に作ったイメージビュ-ワで 画像 1024x768_16bit_color.jpg(65536色)表示時のメモリ使用量は、 イメージビュ-ワ本体だけの立ち上げ時: 1.25MB 画像1024x768_16bit_color.jpg表示時: 1.25+2.62=3.87MB だった。 Windows だと何十メガとメモリ食うよね。 まあしょうがないんだろうけど。 GTK+3はスルーしてGTK+4まで待つお(´・ω・`) Gtk+3は現状で限りなく3に近づいているから、そんなに変わらない。 The psychology literature certainly has a lot to say about the topic, but economists have a rather simplistic view of the issue. , >実のところ,私はKDE-1.0を見て(日本語は通らなかったものの)デスクトップ分野での UNIXの未来を確信し, >GNOME-1.0を見て目の前が真っ暗になった人なのですが(笑) >当時はQtが改変不可だったために,GTK/GNOMEを選択せざるを得なかった. とあるサイトの人のことばなんですが、詳しいことがさっぱりなので、どういう文脈なのかわかりません 誰か解説していただけたら幸いです。もしこれが荒れるような内容でしたらスルーを… 趣旨は脚注でない本文のほうにあると思うが、 GObjectも定着して成長したし、いまは中の人の評価も少しは違うかも。 まぁGtk+はダサい技術だと思う。でもダサいほうが品質高かったりするわけだが クラス構造体の中に変数詰めてるとか(VTableとしても使えたなら…)、 G_SIGNAL_ACTIONフラグはただの目印にしかしてない所や、 せっかくGObjectというランタイムタイプシステムこさえてるのに 一部C言語バインディングからしか使えない機能とかあるっぽいところとかGTK+はだせぇなあと思う。 でもGObjectは面白かった。QtのmocやSiGnal/SLOTはいまいちそそられない。 今はValaが熱いよ。GObjectが好きな人なら尚更ハマること請け合い。 >>293 まぁ見ての通りだと思うけど、KDE1.0は衝撃的だったな。KDEが出るまでは Linux(BSD)は一部のマニアのおもちゃでしかなかったのが一般にも普及しそう な期待があった。 結局サーバー分野はある程度普及したけど、デスクトップ分野は今も昔も 変わってないけどね。 で、Gnome1.0あんまり記憶がないんだけど見た目はMotifに似ていてダサくて 動作が不安定だった記憶がある。 >>297 gedit + gtksourcecompletion で、、、 http://gtksourcecomple.sourceforge.net/ valaでしか試してないけど、一応動く。 Gnome 1というとSolarisのイメージがあるなあ 大学の標準装備だった。俺は速攻twmにしたが。 これからGTK+を学ぼうと思っています。 主にLinuxで開発するつもりで、AnjutaというIDEを使ってみようと思いますが、 Windowsマシンでたまにコーディングしたいときにはどうしたらいいんでしょ? Windows版ってありますか? Linux板で聞くのは変ですが…。 >>300 ム板にもスレがあることに気づいて そこの過去情報を読んだら解決しました。 お邪魔しました。 GUIツールキットを比較しつつ、どれがいいか検討しています。 今の第一候補はGTK+ですが、実際に使っている人の声を聞きたいです。 他の候補はQt、wxWidgetsで、言語はC++の予定です。 GTK+ ・GnomeやXfceで使われているので、ユーザが多そう ・ライセンスはLGPL ・多くの言語向けのバインディングがあるが、CではなくC++だと少し注意が必要(?) ・各OSのネイティブなルック&フィールではないが、テーマによっては近い外観で描画できる Qt ・KDEで使われている ・Nokiaがやっていて安心感がある ・LGPL、GPL、商用版のQPLは制限が非常に緩い ・おしゃれな外観(?) wxWidgets ・GUIの他に多くの機能のラッパが存在して便利 ・ネイティブなルック&フィール ・IDE、RADツールが豊富 ・日本語の扱いにやや難あり(?) Ultimate++というのも気になりますが、マイナーだし、日本語が使えない問題もあるようです。 これらは自分で集めた情報なので間違ってるかもしれません。 他にメリットやデメリットがあればどうぞ教えてください。 よろしくお願いします! >>303 やっぱりGTK+はC++に向いてないということですね。 情報ありがとうございました。 他にも情報があれば皆さんよろしくお願いします。 >>305 GLUTを調べて見ましたが、OpenGLのやつなんですね。 3Dにはあまり興味が無いですが、今後必要になったとき使ってみます。 情報ありがとうございました。 >>306 GTK+はC++との親和性が少し低いけど、gtkmmはC++用で問題ないということですね。 試してみます。 ありがとうございました! rubyでgtkプログラムをしたいんですけど、何かいい開発環境はないですか? gladeとかでみためは作って変換できるのですが、中で実行するシグナル(っていうんですかね)がどういう感じで使えるかというのがわからないので 調べ調べになってしまいます。通常使ってるのはemacsとnetbeansです。これに似た、もしくはその上で動かせるものはありませんか? 補完とかできたらうれしいのですが。 逆に「gladeとかでみためは作って変換できる」の部分を 詳しく教えてほしい。 gtk-builder-convertのことかな? ruby-glade-create-template とかあったよな. クラスライブラリのリファレンス(英語)なら公式サイトでrbbrっていうサンプルアプリとして 置いてあるけど、そういうことじゃないのかな? >>309-311 311さんが言ってるみたいにruby-glade-create-templateで作ったgladeファイルを.rbに変換して オブジェクトは作ったからメソッド書いて自分の思うような動きを作ってちょうだいな。みたいなところまではできます。 しかし、rbファイルを編集するときにrequire 'gtk2'をよんでいるのにemacsでもnetbeansでも補完してくれませんでした。 >>312 rbbrは使ってるOSにパッケージがあったのでそれを入れてみましたが。リファレンスを引けるようになりました! リファレンスが引けると言うことは補完もできるのでは?と今悩んでいる状態です。 >>310 >>311 >>313 サンクスです。ググったら Ruby/Gtk2のチュートリアルに書いてあるね 規制でタイミング逸して返事書かなくてすまん >>309 さんはどんな感じでコードかいてますか? リファレンス見ながらかいている感じですか? >>302 亀レスながら俺も検討中なので... GTK+はこれからやってみるので置いといて、 Qtはさすがに良くできてるけど、簡単なことをやろうとしても多くのクラスを 使わなければならず、また抽象的な概念みたいなもの(データモデルとか データアイテム)とか出てきて、簡単に「サクッ」と作る感じではないので、 習得に時間が掛かりそう。「エキスパートのための高級品」のイメージ。 ウィジットの種類も豊富だし、一つのウィジットが多くの機能を持っているので 困ることはなさそう。 wxWidgwtsは確かにツールが豊富だけど、決定版と言えるものはイマイチ ない気がする。wxDev-C++が導入簡単だけどデバッガーが環境や条件に よって動作しないトラブル発生中。もう随分前に発覚したのになかなか 直らない。Delphiで書かれていて、近くC++に移植が予定されているようだ。 使えるのはCode::Blocksかな? wxWidgwtsはQtよりは理解しやすいと思う。日本語の扱いは別に問題ないよ。 ウィジットの種類は豊富だけど、肝心なものがなかったり... 俺はスピンボタンつきの数値専用エディットボックスで、実数を 扱いたかったんだが、これが標準ではない。3rd Party製があるけど、 IDE/RADで、非標準のウィジットを簡単に取り込める仕組みを 持ったものがないので、結局手で書くしかなくて面倒。 Ultimate++は使い勝手が良くない。というかユーザーインターフェースの 設計が下手で、直感的に使えない。それと日本語の扱いに問題がある。 Windowsの話だけど、エンコーディングにCP932(SJIS)が選べないので、 utf-8にするしかない。それでもC++版Hello World!を「こんにちは 世界!」 にして実行したら文字化けしたので、カッとしてアンインストールして しまった。 以上、ご参考まで。 gtkmmを薦めてるのがいるが真に受けんように C++でまともに動いたら、scim-bridgeみたいなモノを作る羽目にはならん 面白いのはわかるが、今更そんなんやったって・・・ 激しくつまらんけど、これからはAIRですよ いや、これからはJavaですよ 作ってて面白いしね >>315 そうだね。 オンラインリファレンスを地味に検索しながら emacsのruby-modeで書いてるよ。 methodsとかのメソッドで確認したりするぐらい。 emacsで構文解析してメンバ関数だのメソッドを補完する環境って無いんじゃないかな。 無作為に辞書から補完するのはあるかもしれんけど。 netbeansはよく知らない。 Ubuntuだと「追加と削除」からリRuby Browserというリファレンスビュワーが落とせるよね。 これはRuby/Gtk2のクラスも見られたと思う。 型がなんでgintやgcharなの? intやcharではダメなわけ? C言語とのこういうちょっとした違いは 他にもいろいろあるの? > 型がなんでgintやgcharなの? 移植しやすくする為の措置じゃなかったっけか 「g」が付いてるほうが移植性が高いのかねぇ。 みんなはそういうのをどうやって覚えたの? 解説本とかあまり売ってないみたいだけど…。 >>nXIVDau4 たとえばlongが64bitの環境でも、glong的に32bitであってほしい場合にlongの代わりにintやint32をtypedefするとかな。 データ構造の隠ぺいとかはWeb上の先人の残した情報だったり、技術書立ち読みだったり、Win32やNSPRとか同じことやってる実例を見たりとかで知ったよ。 >>324 C言語はintとかの定義に幅があるから コンパイラが違えばintのサイズも異なったりするので 厳密に定義した独自のintを用意するわけですよ 先月出た本はどうでしょう http://www.amazon.co.jp/dp/4274067769 >>325-326 なるほど、なんとなくわかった。 ありがと。チュ! 本は今度本屋で見てみる。 GTK+をこれからやろうと思ってますが、C++よりC言語のほうがいいんでしょうか? 昔CもC++も少しずつかじりましたが、どっちも中途半端に終わって、今は頭の中でゴッチャになってます。 GTK+を始めるこの機会にどちらかをちゃんと勉強するつもりですが、どっちがいいか迷ってます。 CよりC++のほうが言語として優れていたり、C++を覚えたほうが何か有利だったりするんですかねぇ? gtkmmというのを使えばC++でもいけるんですよね? 何かアドバイスをもらえればうれしいです。 >>329 有利かどうかでいえば、一山いくらのプログラマとしても仕事に付けるかという観点ではC++/Java/PHP/VBあたりだろうな。 有利不利なんぞを気にするんなら間違ってもWindowsかWebアプリ、携帯以外見向きもしないほうがいい。GTK+なんかもってのほかだ。 マジレスするなら、C++にあまり慣れてないならCでGTK+やるのがいい。 ついでにPythonあたりも齧っとけばC+GTK+で面倒な部分もこなせるし、Linux方面のプログラムを開発するのに不自由はしないだろう。 >>329 Cはスーパーマクロアセンブラ、C++になって高級言語の仲間入りっつー感じかな。 ある程度規模の大きなプログラム作るんなら、絶対C++の方が有利。 Cははっきり言って時代遅れ。C++は習得しておいた方がいいよ。 組み込み系なんかだと、また話は変わってくると思うが。 GUIツールキットだって、殆どのものがC++を念頭に置いて作られてる。 Cが標準でC++ラッパーを後付けしたのはGTK+くらいなもの。 まぁ、それだけ歴史が古く、練り上げられてるとも言えると思うけど。 >>330-331 どうも! 「C++に慣れてないなら」っていうのはオブジェクト指向が壁になるかもしれないってことですかねぇ。 一応JavaやPHPもちょこちょこやってるので、理解はしてます。 お二人の意見を合わせると、C++のほうがいいけど、慣れてなかったり自信がなかったりする場合は Cにしておくのが無難ってとこですね。 もうちょっと考えてみます。 とても参考になりましたー! >>332 オブジェクト指向が壁になるからではないよ。ほぼ1からC++とGTK+(とgtkmmの固有事情)やるよりはCとGTK+のほうが楽かなとね。 一応gtkmm以外にもJavaとPHP向けのバインディングがあるから、Cでやるのが面倒なようならそれぞれJava-Gnome/PHP-GTKで調べてみるといい。 gtkmmの固有事情くわしく これから始めようと思ってるんだけど >>132 , >>318 とか見ると気になる >>333 Cのほうがやっぱ楽なんですか。 といいつつC++も捨てがたいけど、>>334 さんと同じくgtkmmの固有事情が気になります。 JavaやPHPのやつも存在は知ってましたが、CかC++でアプリを作れるようになりたいなぁと思ってて…。 >>333 , >>334 >>132 , >>318 の言ってることについては心当たりないが、GtkTreeIterだかのバインディングにメモリリークのバグがあるとかいうブログの記事を見たことがある。 固有事情とは言いすぎた。GObjectの仕組みに加えてC++のオブジェクトとの絡みで素のGTK+より覚えることが多くなるかなと思った故の発言だ。 >>334 C/C++ともほぼ未経験なら日本語ドキュメントや和書もある素のGTK+のほうが理解しやすいのではと思ってC+GTKを勧めたが、単純にGTK+のウイジェットを使ってウィンドウアプリケーションを作るならgtkmmのほうが楽なはずだ。 素のGTK+をCで使用する場合、頻繁に型キャストのマクロを使うし、新たなウィジェットを作成する際にはGObjectの動的型システムを素で使うことになるからその点面倒だ。 gtkmmであればその点いくらか楽ができる。だが、ほかの言語バインディングでも使えるウィジェットを作成するとなると素のGTK+の動的型システムの流儀も触れる必要があるから、C++の知識に加えてGObjectの仕組みも知る必要がでてくる。 Javaをある程度使えて、GObjectの動的型システムには触れずにウィンドウアプリケーションを作りたいということであれば改めてgtkmmのほうを >>335 俺は Python でやってる。 C を使っている gtk+ プロジェクトだったら C で書く。 そんなに違いはないし、簡単。 Cだとヘッダーにいちいちプロトタイプ宣言しなければならなかったり 毎回コンパイルしなければならないのが面倒だからPython使ってる。 楽チン。 >>337 ぇー最近perlでGTK触りはじめたけど、変態じゃないやい>< とにかく完成するのが目的なら自分の好きな言語でいいじゃん。おれはRubyだぜ。 なんだかんだ言って、Cのコードは寿命が長いんだよね。 コストベーシスで考えると、GTK+の場合は全てCで書いた方が いいと思う。他のメジャーなソフトはほとんどCだし、 インテグレーションもし易いよね。 Cは初心者向けの本を昔読んで、当時はなんだか難しいなぁって思ったけど、 GTK+に挑戦したくてもう一度読んでみたら大して難しくなかった。 配列、関数、ポインタ、構造体の使い方の基礎がわかってたらGTK+を扱える? この程度の知識で始めるのはなんか怖くて・・・。 GTK+なら、型が決まっているから、 ほんとに基本的な知識だけで十分だと思う。 マクロやプリプロセッサもよく使われているけど、 非常にシンプルなコンセプトだし、問題ないとおもう。 もう「今年中」とかいうセリフが聞かれる時期になったか。 Perl でこんな感じのを書いてみました。 ttp://pochimaru.seesaa.net/article/132639898.html 次ページ移動ボタンをクリックする事で次ページを表示したいのですが、 このままでは期待するように動きません。 現時点の表示をクリアして次ページを表示するにはどうしたらいいのでしょうか? DrawingAreaをAspectFrameで包むと上下左右に、 GNOMEでは1ピクセル、 Fluxboxでは2ピクセル隙間が開くんだが、なんとかならないものか set_border_width(0)でもだめだった python-gtk2 2.16.0 python-glade2 2.16.0 gtk 2.18 gtk2.18.3をubuntu9.10でやっているんですが キーを押し続けている状態を知る事はできないんでしょうか? 今はkey-press-eventとkey-release-eventシグナルを使っているんですが キーを押し続けているとkey-press-eventとkey-release-eventが交互に連続して飛んできて 押し続けている状態を知る事ができません。 key-pressのあとにkey-releaseがなければ押し続けていることになる >キーを押し続けているとkey-press-eventとkey-release-eventが交互に連続して飛んできて 押しつづけているのにrelease-eventがくるとかキーボードぶっこわれてるんじゃね >>351 Xのレベルではそれが通常の動作(モディファイアキー(の一部)以外では)。 Xはautorepeat時にKeyReleaseと続くKeyPressでタイムスタンプを同一にして 送ってくるので、GDKはそれを利用して>>352 のように見せるコードが 一応入ってはいる、が、環境や同時に利用するプログラムといった条件によっては それが働かないみたい。 自分の環境だけ考えるならGDKの該当部分に手を入れて常にその動作をするように してしまうのが簡単。そうでないならやはり同様に次のイベント (gdk_event_peekで得るのかな)とそのタイムスタンプを見て判断するんじゃないかと。 >>352 >>353 >>354 レスありがとうございます。 gdk_event_peekはnullが返ってきたのでダメでしたが gdk_event_getはタイムスタンプ同一のメッセージがしっかり返ってきました。 おかげさまで上手くいけそうです。 >>347 こんな感じでどうでしょう? 163a165,168 > my $currentObject = $scrolled_window->child; > if($currentObject) { > $currentObject->destroy; > } 204a210 > $drawable->show; 224a231 > >>356 動かしたいように動かす事が出来ました、ありがとうございます。 とても基本的なところで躓いてしまってたみたいで、お恥ずかしい限りです。 GtkWidget ↑ ↑ GとWが大文字 これに気付くのに4日掛かった コンパイルが通って空のウィンドウが表示されたときは 雄叫び上げちゃったよ。 Debianスレで GTK+ でウィンドウ出すのに四日かかったって言ってた人かw おめでとう、マジで さぁ早くシグナルをコネクトしまくる作業に戻るんだ >>362 ガッ って言ってほしいのね。 もぉ、寂しがり屋さんなんだからぁ。 なんでこのスレ過疎ってんの? プログラマー不在のスレなの? >>364 そう思うならまず率先して何かを作って公開してみては如何でしょうか? gtk2hsで書いてみたけど思ったより使いやすかった gtkで外部装置から受信した温度データをグラフ描画するソフトつくってる。 左3/4が描画領域で残りに現在時刻や表示倍率の設定がある。 連続してデータ受信すると、時刻表示のタイマーがとまったり、倍率設定 のコンボボックスが操作できなくなるので、スレッド分けしようと思うのだけど expose_eventを別スレッドにすることって可能? できそうな気がするけど。 とりあえずやってみたら? >>365 作る気になれるようなことが必要なのではないですか。 >>369 すごいですね 勉強のためにぜひソースを見せて頂けないでしょうか? もしくは、ソースリストを公開しているwebページを ご存知でしたら教えてください。 ∧__∧ (´・ω・) いやどす ハ∨/^ヽ ノ::[三ノ :.、 i)、_;|*く; ノ |!: ::.".T~ ハ、___| """~""""""~"""~"""~" ブロックする可能性のある処理は別スレッドにしないと止まる Exposeを別スレッドって、ぷっ。 さすがLinux。 GTK+の本を買おうと思うんですけど、この2冊だとどちらがいいですか? ・入門GTK+ ・Foundations of GTK+ Development プログラミングはCの基礎がわかっている程度です。 PHPもやってます。 両方買えばいいじゃない。 あと、入門GTK+の方は作者がホームページで 本の内容を公開し始めてる Foundations of GTK+ Development は一部 google books にでてる read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる