GTK+プログラミングat LINUX
GTK+プログラミング - 暇つぶし2ch369:login:Penguin
09/12/13 11:19:39 naHBDIjP
gtkで外部装置から受信した温度データをグラフ描画するソフトつくってる。
左3/4が描画領域で残りに現在時刻や表示倍率の設定がある。

連続してデータ受信すると、時刻表示のタイマーがとまったり、倍率設定
のコンボボックスが操作できなくなるので、スレッド分けしようと思うのだけど
expose_eventを別スレッドにすることって可能?

370:login:Penguin
09/12/13 11:42:32 P93DdDFa
できそうな気がするけど。
とりあえずやってみたら?

371:login:Penguin
09/12/16 20:46:38 laS/Dg3j
>>365
作る気になれるようなことが必要なのではないですか。

372:login:Penguin
09/12/16 20:51:22 dPFj9y5E
>>369
すごいですね
勉強のためにぜひソースを見せて頂けないでしょうか?

373:login:Penguin
09/12/16 20:53:19 dPFj9y5E
もしくは、ソースリストを公開しているwebページを
ご存知でしたら教えてください。

374:login:Penguin
09/12/16 20:54:06 6soPE05o
    ∧__∧
    (´・ω・)   いやどす
    ハ∨/^ヽ
   ノ::[三ノ :.、
   i)、_;|*く;  ノ
     |!: ::.".T~
     ハ、___|
"""~""""""~"""~"""~"


375:login:Penguin
09/12/16 21:47:42 c63j0iz9
受信を別スレッドでやるのが普通じゃないの

376:login:Penguin
09/12/16 22:44:30 Q8cS+VLW
ブロックする可能性のある処理は別スレッドにしないと止まる

377:login:Penguin
09/12/16 23:39:53 jaaomSx0
Exposeを別スレッドって、ぷっ。
さすがLinux。

378:login:Penguin
09/12/17 02:29:15 F8Jdsro2
何がおかしいのかよくわからん。

379:login:Penguin
09/12/26 01:54:27 XiSC9KS7
GTK+の本を買おうと思うんですけど、この2冊だとどちらがいいですか?
・入門GTK+
・Foundations of GTK+ Development

プログラミングはCの基礎がわかっている程度です。
PHPもやってます。

380:login:Penguin
09/12/26 13:18:25 6MLS1ve1
両方買えばいいじゃない。
あと、入門GTK+の方は作者がホームページで
本の内容を公開し始めてる

381:login:Penguin
09/12/26 14:29:39 YM2nDrzN
Foundations of GTK+ Development は一部 google books にでてる

382:379
09/12/27 00:54:04 HfaPMpb7
>>380
両方買うと、結局一冊は読まないままになったりするタイプなので…。
あと、書籍代はケチるべきじゃないと思いますが、深刻な金欠状態なのです。

入門GTK+の作者サイトでの公開について、情報ありがとうございます。
休暇中に目を通してみようと思います。

>>381
Amazon USのレビューで「ネット上で読める」と書いてあったので、どこにあるのか気になってました。
書店になくて立ち読みできなかったので、Google Booksで読んで判断します。

どうもありがとうございました。

383:login:Penguin
09/12/27 08:12:49 Ri5kV8GM
GTK+は公式チュートリアルが結構充実している方だと思うので、
それ読めばとりあえずリファレンスとサンプル眺めつつ使えるようになる。

それでも本が欲しくなるならあるウィジェットの使い方を
詳しく書いていて欲しいだとかマルチスレッドとの兼ね合いが
知りたいだとか(あまりいい例が出てこなくてすまん)
求めるものがはっきりしてくると思うので、
それから本を選んでもいいんじゃないだろうか。

384:379
09/12/27 20:27:25 HfaPMpb7
>>383
公式チュートリアルのことを知りませんでした…。
ダウンロードできたので、スマートフォン等にコピーして移動中でも読めそうです!
プリントアウトして持ち歩くのもいいかもしれません。
最終更新日が2002年10月27日と古いんですけど、問題ないですよね?

書籍を買ったほうが最後まで読みつづけようという意欲が持てる気がしますが、
とりあえず公式チュートリアルを読もうと思います。

ちなみに「Foundations of GTK+ Development」はGoogle Booksで見てみたら
とても良さそうでした。
「入門GTK+」のほうは著者ページで見つからなかったです・・。

385:login:Penguin
09/12/28 02:58:56 CtQUEG8Y
> 最終更新日が2002年10月27日と古いんですけど、問題ないですよね?

……?

公式チュートリアルは
URLリンク(www.gtk.org) でズバリ The Official Tutorial といってる
URLリンク(library.gnome.org)
だよ。
GTK+のソースコードのtarball中にも入ってる(docs/tutorial/以下)。

386:login:Penguin
09/12/28 07:38:54 RlHoBGgo
>>385
Tutorial Availabilityのページにあるリンク(fURLリンク(ftp.gtk.org))から
ダウンロードしました。

387:login:Penguin
09/12/28 11:47:38 T0tfWrHc
自分でいいと思ったならそれ読め。もう知らん。

388:login:Penguin
09/12/28 22:21:50 Uh78zlUy
そう言うな。明日になればまたみんな仲良しななしさん

389:login:Penguin
09/12/28 22:55:34 AK9LsQvN
>>387 何?どうしたの?

390:login:Penguin
10/01/09 18:48:59 khh4I0eb
今日からGTK+を始めてみた
今までwindowsのvisual stdioしか使ったことなかったから、パスさえ通ってりゃ
#g++ hello.cpp
だけでコンパイルをやってくれると思っていた
今日一日かかって`pkg-config --cflags --libs gtk+-2.0`を知って
ウィンドウを出せた
疲れた

391:login:Penguin
10/01/10 13:16:43 3oa4ldyN
VisualStudioだってオプションからディレクトリの設定しなきゃ
ビルドすらままならないだろうに、何言ってんだコイツ

ましてやコマンドラインからCL.exe呼び出すんなら、vcvarsall.batなり
vcvarsall.batで設定される環境変数群を、予めユーザー環境変数に定義して
おかなければCL.exeもg++と同じエラー吐いて止まるだろうに・・・

392:login:Penguin
10/01/10 14:58:37 zlmG+3hJ
pixmapの背景色を黒くしたキャンバスを作って
その上に画像と文字を描画してて、文字は白

これに対してニコ動のコメント表示/非表示みたいなことをやりたい

文字を描画するときのみXORモードで書いてるんだけど
背景の黒の上に書かれた物は消えるけど、画像の上に書かれた
物は黒抜き去れて残ってしまう

説明わかりにくいかも知れないけど、なんか良い方法無いかな

393:login:Penguin
10/01/13 03:10:04 hKXsU3qa
文字を描画しないだけでいいんじゃないの?

394:login:Penguin
10/01/13 13:45:44 rT8A3kXe
>>390
チュートリアルとか見てないの?

395:login:Penguin
10/01/14 01:41:29 2htHqmwQ
空気の福田はともかく、徳井が苦手でねぇ…

396:login:Penguin
10/01/15 10:31:57 2tKD4R7l
GTK+を使って記述されているソフトとしては
gimp以外だとどんなものがありますか?
ソースリストを読んで勉強したいのですが

397:login:Penguin
10/01/15 11:34:43 +6ILVUJ5
>>396
URLリンク(ja.wikipedia.org)
URLリンク(www.gtk.org)

398:login:Penguin
10/01/16 13:06:47 st13uJnk
2chブラウザのJDとか、画像ヴューアのgqviewとか。

399:login:Penguin
10/01/23 07:49:03 c81zxfOz
ツールバーにウィンドを表示しないようにするにはどうすればいいの?

400:login:Penguin
10/01/26 09:24:59 WUy9SOAf
 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 はインストール済みか最新バージョンです
何もしません
とでます。
...よろしくお願いします。


401:login:Penguin
10/01/26 11:26:21 TXiGdVqu
チュートリアルどおりやれば躓かないとおもうんだけどな
gtk2, gtk2-develを入れて
gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`

402:login:Penguin
10/01/26 16:11:56 R1nywYDP
>> 401
 遅くなりましてすいません。返信ありがとうございます。
うまくいきました。
ウィンドウが表示されたとき、感動しました。
でも、emacs からはコンパイルできませんでしたので、リンカーあたりの
設定かな?と思っています。
 何はともあれ、ありがとうございました。


403:login:Penguin
10/01/26 16:57:00 R1nywYDP
またまたお願いいたします。
linuxにおいて、
windowsの
SetCursorPos()
GetCursorPos() に相当するものはありますか?
参考リファレンスなど紹介してもらえれば助かります。

404:login:Penguin
10/01/26 17:26:41 Up0ueX3p
>>403
URLリンク(library.gnome.org)

405:login:Penguin
10/01/26 18:04:33 R1nywYDP
>>404
 返信ありがとうございます。
...勉強します。

406:login:Penguin
10/01/26 18:11:45 OKgnAGh0
>>402
pkg-configコマンドが何なのか調べるんだ。

407:login:Penguin
10/01/28 14:40:04 YXchBGq5
はじめまして。GTK初心者です。

困っていることがあります。
gtk_init()でハングするんです。

1. gtk_init()を手動でコール出来るようプログラミングし、rc.localでそのプログラムを起動。
2. xwindow(gnome)ログイン後にgtk_init()をコールさせる。

上記の2の時点でgtk_init()でハングしているらしいです。
(gtk_init()下行のログが出力されない)

原因や対処法をご存知の方いらっしゃいませんか?


408:login:Penguin
10/01/28 18:04:22 VFHNmy96
>>407
突っ込みどころが3点ほど。

・rc.localに登録して起動し、さらにログインした後にも起動・・・?

・gtk_init()だけ実行するプログラムを作ったの?
 だとしたら壮大な勘違いをしている。gtk_init()関数が何をする関数なのか調べるんだ。

・「ログ」とは何のログ?ハングしているらしい、では分からないのでソースをUPするんだ。


409:login:Penguin
10/01/28 18:34:10 YXchBGq5
>>408
ありがとうございます。すみません、説明不足でした。

ちょっとソースは長いので文書のみで失礼します。

プログラムは、rc.localで起動した時点ではgtk_init()をコールしない作りにしてます。
その後、ログイン後にコンソールから別プログラムを通してプロセス間通信によりコマンドを送信、
そしてコマンドを受信した時点で gtk_init()をコールさせる形にしてました。

ログは、
 printf("call gtk_init\n");
 gtk_init();
 printf("call end\n"); ★
のようにして、★が出力されない感じです。

その後の調査で、どうやら rc.local起動させた場合、環境変数 DISPLAYなどが
全く設定されていないようです。

そこら辺に問題有りかと思っているのですが、なにぶん、勉強不足でして。
時間も無いので質問させて貰った次第です。


410:login:Penguin
10/01/28 18:40:22 A3FmJC2O
DISPLAYも何も、Xの起動はrc.localより後なんだぜ?
プログラム分けるんじゃ駄目なんかい

411:login:Penguin
10/01/28 18:44:27 0EFvnz24
時間も無いので
時間も無いので
時間も無いので
時間も無いので
時間も無いので


412:login:Penguin
10/01/28 19:24:50 bFXQct0B
>>409
「GTK初心者」と言うよりLinux&プログラミング初心者のようですね。

貴方にGTKはまだ早いです。環境変数やXの基本が理解できていないと
説明されても分からないと思いますので出直してきて下さい。

413:login:Penguin
10/01/28 19:30:37 uG/wS28i
お金も無いよ
お金も無いよ
お金も無いよ

414:login:Penguin
10/01/28 19:32:04 YXchBGq5
>>410
ありがとうございます。
inittabで初期化レベルを分けていることもあり、
てっきりrc.local前に起動処理が走っているかと勘違いしていました。
お恥ずかしい。

>>412
おっしゃるとおりです。
出直してきます。


415:login:Penguin
10/01/28 21:55:00 WU2RMXov
>>414
DISPLAYが設定されてなくて、Widget使わないなら、
GObject関係を使うためだけなら、g_type_init ()すれば良いよ。
有名なエラーが出るからgtk_init()使ったってエスパーしてみた。

416:login:Penguin
10/02/07 16:35:02 jjKybwb6
書籍「入門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の値でエラーが出るようです。関係する記述を確認しましたが問題ありません…


417:login:Penguin
10/02/07 17:08:07 KhA+E7Mu
エラーメッセージを読んでみましょう
acitonsが宣言されていませんよ
actionsと間違えていませんか?

418:login:Penguin
10/02/07 17:18:05 jjKybwb6
>417さん
ごめんなさい、本当に気づきませんでした。エラー文を読んでいたのに…ありがとうございました

419:login:Penguin
10/02/09 01:35:25 gRID6Pu9
ググれ秀才

420:login:Penguin
10/02/10 20:29:31 y7MwWf/g
gtkmmをこれからやってみようと思ってるけど、
入門GTK+を読みながらC言語で練習するより
最初からgtkmmでC++使ったほうがいい?

gtkmmの入門書がないみたいなので、
取っかかりとして入門GTK+を候補にしてるんだけど…。

421:login:Penguin
10/02/11 13:48:24 AIMyey0J
>>420
最終的にC++で書くのが目的なら、↓みたいなところがあるからC++で書けばいいんじゃない。
gtkまわりの日本語の情報が少ないから、言語は違うけどたまに参考にさせてもらってるよ。
URLリンク(book.geocities.jp)


422:login:Penguin
10/02/12 15:44:26 DJstgHYM
>>421
そのサイト見てみます。
ありがとう。

423:login:Penguin
10/02/17 19:33:47 Ozbv3EUx
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割は、
前記のとりあえずリビルドです。

424:login:Penguin
10/02/17 19:42:41 TkV44uU+
1.2のランタイムぐらい入っててもいんでない?

425:login:Penguin
10/02/21 14:06:19 pTXZtDIq
ちょっと自前で描画しようとすると、gdkとcairoが混在していて
煩雑としてるなぁ。
少なくともGDKの描画関連のAPIはもういらないだろう。
3.0辺りでばっさり消すとかしてもいいんじゃないか。

426:login:Penguin
10/03/11 00:46:30 Vm2wsjJM
GTK(+glade)を使ったあるプログラムを
・HP-UXサーバ
・RedHat Linuxサーバ
でそれぞれコンパイルおよび動作させ、
別のLinux端末に表示させたところ、
表示や動作自体は問題無いんだけども、
エディットボックスへの入力で
RedHat Linuxの方は日本語入力を受け付けてくれません。
ちなみに、それぞれに入っているGTKはともに1.2です。
SCIMとかの環境は、一見同じっぽいですが・・・・
どこか見るべき箇所はあるでしょうか?

ちなみに、glade自体も
HP-UXは日本語入力を受け付けてLinuxサーバの方は
日本語入力を受け付けてくれません。
gladeの問題なんですかねぇ・・・?

427:login:Penguin
10/03/12 16:52:20 sdgtdQtC
Gtk::Dialogの派生クラスを作成してある条件の時表示させています。
表示後一定期間経過したら自動的にそのダイアログを閉じたいのですが、
どうすればいいのでしょうか。
特にダイアログにこだわっているわけではありません。
何かメッセージを表示 -> 一定時間後に自動的に消去
が実現できればいいです。
よろしくお願いします。

428:login:Penguin
10/03/12 19:39:46 37m6gC+E
>>427
g_timeout_add関数ではだめでしょうか?

429:login:Penguin
10/03/12 19:41:48 WSSuZVVD
>>428
そこはらめぇーーーー

430:login:Penguin
10/03/16 23:40:15 u16nCOLZ
gtk_widget_drawを呼ぶとたまにアプリが落ちる
調べたらgtk2では非推奨になってた
かわりにgdk_window_invalidate_rect使えって書いてあったから
それ使うようにしたら、exposeイベントハンドラに入ったり入らなかったりするようになった



431:login:Penguin
10/03/19 03:10:05 pTXFbkuH
Xawで作られたソフトのWidgetをGnomeテーマのスキンっぽく
変える方法ってありますか?Xaw3dみたいな

432:login:Penguin
10/03/22 18:34:33 gITq0f63
>>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;
}

433:login:Penguin
10/05/01 02:23:02 ZoBub0ZC
あるデータファイルをどんどん読んで処理しながら、1秒に1回その途中経過を
Windowに表示する、みたいなプログラムを書こうとしています。

Windowに表示する部分は、gtk_main()を呼ぶ前に、g_timeout_add(1000, draw, NULL)
のようにしてタイムアウト関数を使えばいいとして、データファイルを読み込んで
処理する部分は、どこに書けばいいのでしょうか?
スレッドとかを使わずにやりたいのですが。

434:login:Penguin
10/05/01 18:51:28 lTmE6Ym2
g_io_add_watchとか?

435:login:Penguin
10/05/01 21:52:51 5eA3cNHe
LinuxでGTK+やってる人はWindowsでも主にGTK+で書いてる?
WindowsのAPIは使いませんって人いるのかな。

436:login:Penguin
10/05/02 00:32:37 Bdebw0Wa
そもそもWindows使いません。

437:login:Penguin
10/05/02 06:00:37 J+HCMgwe
>>433
スレッドを使わない方がめんどくさいと思うんだけどね。
ずーっと処理し続けて一秒に一回描画するって事だと
その処理の間は入力受け付け無くてもOK?
その為のスレッドなんだけどなぁ。

シングルCPUでもそう言うことが出来るのがスレッドの良いところ。

それでもスレッドを使いたくないというなら、こまめにシグナル飛ばしっこ
するしかないと思う。


438:login:Penguin
10/05/02 21:48:38 uNQYZGNa
簡単なシミュレーション用のGUIラッパ作りたんですが、
Qt4とgtkmmどっちが作るの楽ですか?
どっちもバグてんこ盛りそうで、javaやM$畑に生まれたかった

439:login:Penguin
10/05/02 22:14:42 WSA7U0rv
>>438
マジでバグテンコ盛りだからいまからでも上にJava+Swingあたりでやらせてくれって掛け合ったほうがいい。
ちゃんと上にQtもGTK+もバグテンコ盛り過ぎてプロダクションレベルに使えないって直訴するんだぞ。

440:login:Penguin
10/05/04 08:25:25 i62yYai1
>>438
vala とかどうか。バグが多いかどうかはプラットフォームに
よる部分も多いと感じるが…win ならC#で組むのが楽だとは思う。

441:login:Penguin
10/05/04 09:52:32 gZYcN+Ue
>> 439
使いこなせていないだけじゃないの。

442:login:Penguin
10/05/04 21:20:07 C0XJN+7X
なんでこのスレ、ム板じゃないの?
SDLとかはちゃんとム板でやってるのに
なんでGTKはのけ者なの?
いじめに合うの?

443:login:Penguin
10/05/04 21:28:25 9ORU/lJS
Gtkプログラミング on Windows!!!
ってスレがム板にあるけど?
スレリンク(tech板)

444:login:Penguin
10/05/04 21:36:12 C0XJN+7X
窓専用じゃん。

445:login:Penguin
10/05/04 21:47:13 9ORU/lJS
自分で立てればいいぢやん

446:login:Penguin
10/05/05 17:49:24 NLGDqQjm
まぁええやんここにも有っても
どうせ両方見てるし


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch