GTK プログラミング! ..
511:login:Penguin
04/07/02 20:41 ruSxXmGR
Labelの色を指定するのはどうすれば良いのでしょうか?
リソースファイルではなくてプログラム中で変更したいのです。
同じラベルに対してokなら青errorなら赤みたいに。
512:login:Penguin
04/07/02 20:49 EdA1krgC
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL(label), "<span foreground='red'>red</span>");
では?
513:login:Penguin
04/07/02 21:07 NFwwiccW
>>511
URLリンク(www.gnome.gr.jp)
514:511
04/07/02 22:06 ruSxXmGR
>>512
おおお、こんなに早くレスがつくとは思いませんでした。
gtk_widget_set_colormapあたりかと思って悩んでました。
ありがとうございました。
515:login:Penguin
04/07/17 01:44 gxRBMExw
gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
GTK_SIGNAL_FUNC(KeyPress), NULL);
でコールバック関数を登録し、
static void KeyPress(GdkEventKey *event)
{
g_print("%x\n",event->keyval);
}
}
これで押されたキーを判別しようと思ったのですが
実行結果はどのキーを押しても 0 と表示されてしまいます。
何か使い方が間違っているのでしょうか?
それとも、仕様ですか?
516:515
04/07/17 01:45 gxRBMExw
↑
余計な閉じ括弧がひとつありますが、書き込み時に間違えて入力してしまったものです。
気にしないでください。
517:515
04/07/17 02:05 gxRBMExw
自己解決しました。
お騒がせしました。
518:login:Penguin
04/07/20 21:04 mCNuObfQ
X11^^^^
519:login:Penguin
04/07/21 13:46 q4gHD8Am
質問です。
gtk_widget_refってどういう目的で使うのでしょうか。
glade使うとwidgetをcreateした後に必ずついてくるんですが
gtk_widget_refを使わないでcreateするだけだと
何かまずいことが起こるんでしょうか。
520:login:Penguin
04/07/22 16:23 y/5s047B
>>519
>glade使うとwidgetをcreateした後に必ずついてくるんですが
>gtk_widget_refを使わないでcreateするだけだと
>何かまずいことが起こるんでしょうか。
glade 使うと gtk_object_set_data_full してるからgtk_widget_ref
は、おいといたほうが良いと思う。
起動から終了までの間にウィジットを破棄したりしないなら gtk_widget_ref
は不要とか言うのは無謀かな?よくわかってないけど。
521:login:Penguin
04/07/31 10:39 MPOS1TDH
Window全体に影を付けたいのですがパッチとかないですか?
522:login:Penguin
04/08/06 15:14 IQdNzkhX
1はいずこ...
523:login:Penguin
04/08/25 15:55 j+IRN/yq
GtkGLExtの日本語マニュアルは無いのか…まぁ訳すけれど…
作者日本人だよな。なんか複雑。
524:login:Penguin
04/08/25 20:34 i4j2Wyy5
>>523
日本語だと解説やマニュアルどころか、情報自体がないな・・・。
どころか、英語でも状況はかわらなさそう・・・。
使ってる人いるのか?と思ってしまう。
525:Exampleに数時間気づかなかった人(1/20)
04/08/26 13:56 9NdnJg9X
>>524
URLリンク(mail.gnome.org)
あちらの国でのメーリングリストを見ると大して人気があるようには見えない。
評価用の2画面同時表示とかサンプルのようなソースの疑問点?の質問が多いね。
URLリンク(gtkglext.sourceforge.net)
どーでもいーがサイトにあるlogo.cは、インストールした中のExampleの
ソースのままなので、Exampleの下からlogo.hとかを持ってこないと表示できない。
526:login:Penguin
04/08/29 01:43 I8sIe2mZ
Gtkのイベント(シグナル?)についてお聞きしたいのですが、
独自イベントを作ってgtkのメインループの中でハンドリングするには
どのようにコーディングすればよいのでしょうか?
よろしくお願いします。
527:login:Penguin
04/08/29 18:32 0ci6kHoF
スクロールバーが付いたテキスト入力の領域を作るにはどうすればいいのでしょ
うか?
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
でscrolled_windowを作り,
text = gtk_text_new(NULL, NULL);
でテキストウィジェットを作り,
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), text);
としてみましたが,スクロールバーが一杯になっていて全くスクロールできません.
URLリンク(www.gnome.gr.jp)
こことかを見てみましたが,一行入力のテキストエントリしか書いてなかった
のでわかりませんでした.この方法ではできないのでしょうか?初歩的な質問
ですみません.
528:login:Penguin
04/08/29 20:56 3dMcPoCy
>>527
gtk_container_add (GTK_CONTAINER (scrolled_window), text);
529:527
04/08/29 23:43 0ci6kHoF
できました!ありがとうございます.
530:login:Penguin
04/09/02 19:50 UwBORxvn
windowをマウスで左クリックしたら「クリックしたよ!」というメッセージを出すプログラムを
書こうと思い、eventの中からマウスで左クリックしたeventを取り出して標準出力するつもり
のプログラムを書いたのですが、意図した通りに動いてくれません。おそらくイベントハンドラ
のところがおかしいのでしょうが、どのように書けばよいでしょうか?
---------
#include<gtk/gtk.h>
#include<stdio.h>
static gboolean click_event(GtkWidget *widget, GdkEventButton *event,
gpointer data){
if(event->type==GDK_BUTTON_PRESS &&
event->button==1){
g_print("Mouse clicked! \n");
}
return FALSE;
}
int main(int argc,char *argv[]){
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "event",
G_CALLBACK(click_event), NULL);
gtk_widget_show(window);
gtk_main();
return(0);
}
531:login:Penguin
04/09/02 21:27 B1qwsflf
>530
Xlibをインクルードしていないじゃないか。
それではメッセージは受け取れないな。
532:login:Penguin
04/09/02 22:24 Iz+TckRx
>>530
window でマウスのイベントを取ってどうするんだ、というのは置いといて・・。
window のイベントマスクを設定する。
533:MyDoom被害経験者(当時は深刻)
04/09/06 00:41 vttGuatR
GtkとKDE/Qtでは、どちらがGUI programmingを始め易いんでしょうか?
コード量の少なくて済む方を教えてください。
534:login:Penguin
04/09/06 00:48 yRhIRqUd
>>533
お手軽なほうがいいってんならTcl/Tkやっとけ。コード量少なくてすむぞ。(藁
それぞれのサンプルコード見てこっちが性に合ってるな、とか、KDEメインに使ってるからQtとかないのかね。
どっちにしたってGUIプログラミングする分にはコード書くし、量的に差があるったって鼻毛みたいなもんだよ。;-p
535:login:Penguin
04/09/06 02:35 mXXgruj5
CがいいかC++がいいかで選んだら?
536:login:Penguin
04/09/06 08:07 j+KxsIhK
>>533
この質問、やたらあちこちで見るな。
537:login:Penguin
04/09/06 12:41 fIwSWiYt
サポートしてる言語がやたら多いのはGtk+。
C++, Python, Ruby, Perl, Scheme, Tcl, PHP, Java, C#, OCaml, Haskell みたいに
実用一辺倒から Research Language までいろいろ。
ただ完成度やドキュメントの整備状況は言語でまちまち。
Qt はその仕組み上そういうバインディングが作りにくいそうな。数少ない
バインディングも Qt2 にしか対応して無いのが多い。
538:login:Penguin
04/09/06 14:20 mXXgruj5
Gtk+はバインディングが充実してるものの情報が少ない、ともいえる。
また、CがデフォなだけにC++でさえ情報が少ないっつーのが難点。
Qtのバインディングで実用レベルなのはPythonくらいだが、これは結構
情報も多くしっかりしてる。
両方やってる感じでは、言語で選ぶならC++かPythonならQt、それ以外
ならGtk+ってのが妥当だと思う。もちろんツールキットにあわせて言語
を選ぶなら好きにしてくれってことだが。
539:login:Penguin
04/09/06 16:38 iCHw81Ws
あと、あまり気にしないとは思うがシェアウェア化とか商用にするのなら
Qtはライセンス購入が必要になる(QPL)
厳密にはGtkもGPLなのでオープンソースが義務付けられたり、色々あるんだが…
オレ的ルールを使用する会社等は「ライブラリの改変をしなければ使いたいホーダイ」という有様。
何の為に勉強しているかは知らないが、オレの勝手なイメージでは
Gtk:
オープンソースしていいクリエーター
一般的な研究者
小中企業
Qt:
コアな研究者
大企業
が使用している。
あと勘違いしている人が多かったんだけれど、
どちらも英語の読解力は必要(Linuxをやっていたら常識とは思うが)
Gtkを表面だけ理解するなら日本語のドキュメントだけで事足りる。
Qtは最初から英語のドキュメントとにらめっこすることになる…かもしれない。
540:login:Penguin
04/09/06 17:03 X3pm9qox
Gtk+ は LGPL なので商用ソフトウェアも開発可能ですが
541:login:Penguin
04/09/07 22:03 /BPz6lrP
ウインドウをクリックしたらそのウインドウサイズを取得したいのですがどうすればできますか?
542:login:Penguin
04/09/07 22:13 CyRP0Tn+
>>541
クリックで起動されたコールバックの中で gtk_window_get_size
543:login:Penguin
04/09/07 22:43 /BPz6lrP
>>542
さんきゅー。できました!
544:login:Penguin
04/09/07 23:54 4Dablgl8
Gtkにラッパーとかかませて、UNIX(LINUX)とC/C++でWin32のようなプログラミングできるようにした環境って
ないのかな。
(つまりCreateWindow〜CALLBACK WNdProc〜GetMessageのような流れで作る環境)
545:login:Penguin
04/09/08 00:46 k2AJ7vTU
gtkmmでは不満?
546:login:Penguin
04/09/08 01:11 mJ44H/or
マルチプラットフォームを考えてるならwxWidgetかな。
547:login:Penguin
04/09/08 03:30 U5iHDCUQ
>>544
そりゃあ、無いでしょ。Windows上ですら、制作者はWin32 APIを直に使って
アプリケーションを書きたいなんて思わないんだから。
548:login:Penguin
04/09/08 03:56 TMOl9BnE
>>546
UNIX USERの特集で興味が沸いたんだけど、
他に書籍か雑誌の資料で良いのないかな?
549:login:Penguin
04/09/08 11:27 ktyLyrud
>>548
とりあえずム板ののひょーんスレでも覗いてみたら?
550:login:Penguin
04/09/08 15:23 wSTR0Xhj
GTK2のプログラムをライブラリ化しようとしてautomakeやautoconfを使ってconfigureを作ろうと
したのですが、
gtk/gtk.h: そのようなファイルやディレクトリはありません
というエラーがでます。自分の手でMakefileを書いた時にはこんなエラーは起きなかったのですが
Makefile.amやconfigure.acに何か特別に書かなければならないことがあるのでしょうか?
551:550
04/09/08 17:39 wSTR0Xhj
自己レス
できた。三時間ぐらい調べるのにかかってしまった。。。
configure.acに
AM_PATH_GTK_2_0(2.0.0,, [AC_MSG_ERROR(Test for GTK failed.)])
とか書いてやると、ライブラリパスやらヘッダパスやらがGTK_CFLAGSやGTK_LIBSに定義される。
それをMakefile.amに
INCLUDES = @GTK_CFLAGS@
LIBADD = @GTK_LIBS@
と書けばOK。GTKの他にgtkglextとかを使いたいのなら/usr/share/aclocalにあるgtkglext.m4の
しょっぱなにあるコメント欄を見て、GTKと同じようにマクロを呼び出してMakefile.amにパスを書き込む。
552:login:Penguin
04/09/08 18:16 ROF7GWcX
>>549 さんきゅ。前の名前であったのね。
|【GUIライブラリ】wxWindowsでのひょーん
|スレリンク(tech板)l200
553:login:Penguin
04/09/08 19:55 aC9UlW7m
PKG_CHECK_MODULES() もあり。
554:546
04/09/09 06:22 krUgg33f
>>548
wxWidgetsのソースをダウンロードすると、
たくさんのサンプルがついてるので、それが結構参考になると思います。
中には古いのがあったりするのですが、大よその概念はつかめると思います。
米AOLのインストーラーとかに使われてて、Windows/Linux/Mac OS Xでいけてるみたいなので、
商用レベルにはなっていると思います。
555:login:Penguin
04/09/11 22:08:37 2jzJ2iMt
華麗に555げっと。
556:login:Penguin
04/09/15 00:00:14 XXdKtByK
widget やシグナルのことを知りたくて、The Glib Object system っていう
チュートリアルを読んでるんですが、くじけそうです・・。
gtk のチュートリアルと Glib Object systemのチュートリアルの間を埋める
ようなレベルの説明って、どこかにないでしょうか?
以前、GTKハッキングレポート っていうそれっぽいページがあったと思ったんだ
けど、今探すとなくなってるみたいだし・・・。
557:煽りイカ
04/09/15 02:24:11 S7MStXnB
Gtk+はANSI-C言語、QtはC++言語でライブラリが用意されていると言う
解釈でよろしーでしょうか?
オブジェクト指向で開発する場合には、後者の方が使い易いんでしょーか?
GtkのマニュアルをPC上で読んでいたら目眩がしてきたので、KDEのように
本になって出てないでしょうか?あったら買いたいです。
558:login:Penguin
04/09/15 03:05:40 VtuDal+L
>>556
URLリンク(web.archive.org)
まぁ自前のWidgetというかオブジェクトを作るとかしない限りこういうことは知らなくても問題ないよ。
>>557
英語でよけりゃ
URLリンク(www.nostarch.com)
が網羅的でよさそうな気がする。amazon.co.jp でも買えるよ。洋書版オライリーを扱ってる本屋にも置いてあるかもしれない。
Gtk+の書籍って日本語英語問わずチュートリアル的な本がほとんどなので、リファレンス的
なものとなるとこれ以外の選択肢はない。
559:556
04/09/15 17:57:59 XXdKtByK
>>558
いいサイトをありがとん。
>まぁ自前のWidgetというかオブジェクトを作るとかし
人のプログラム見てて、まさにこれをしてたので調べてます。
気がつくと gobject のソースの中で遭難中。
560:煽りイカ
04/09/15 22:46:48 S7MStXnB
>558
有り難うございます。
561:login:Penguin
04/09/30 18:40:47 ZNjn4MmY
質問です。
必ずウィンドウ上の何れかのウィジェットがフォーカスを持っているようにしたいのですが
どうすれば良いか分かりません。
例えば、1つのボタンを貼り付けただけのウィンドウを作ったとします。
これを実行してタブを押すと、そのたびにボタンがフォーカスを得たり失ったりします。
ボタンがフォーカスを持っていないときはいったい誰がフォーカスを持っているのでしょうか?
あるいは誰も持っていない状態というのがある?
どちらにしても、この状態をなくすにはどうすれば良いのですか。
教えてください。
562:login:Penguin
04/09/30 18:48:03 SmK1xNom
>>557
Qtはいいぞぉ。あそこまで洗練されたライブラリは
そうそうあるもんじゃない。
563:login:Penguin
04/09/30 20:38:08 e5kfAN1B
>>561
何もしなくてもそんな状態じゃないけど…
564:561
04/09/30 20:50:54 9AhHdXeZ
>>563
書き忘れていたんですが、1.2の話です。
2系だと平気なんですね、きっと。
565:login:Penguin
04/09/30 22:16:53 e5kfAN1B
>>564
ウィンドウウィジットの GTK_CAN_FOCUS フラグを落す。
バージョンによって違うとは…。
566:561
04/10/01 10:45:06 TSUAcXDI
>>565
だめですた。 orz
でも、ありがとうございました。
もうちと、自分で試してみます。
567:login:Penguin
04/10/01 20:39:26 HB0CGb7q
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GTK_WIDGET_UNSET_FLAGS(window, GTK_CAN_FOCUS);
568:login:Penguin
04/10/02 19:02:32 vwpDQWM7
電光掲示板みたいに文字が流れる
プログラム作りたいんですが
参考になるソースしりません?
バージョンはGtk+2.2 です
569:364
04/10/02 23:52:42 lvcJFuth
「電光掲示板みたいに」が、ドットもそれらしく表現ということだと
GdkPixbufあたりをつかって自前で画像を描画することになるかと。
いったん文字をDrawableに描画してgdk_pixbuf_get_from_drawableで
イメージを取得するとか。
570:login:Penguin
04/10/03 00:02:22 px/BonVe
>>569
ありがとうございます。
さっそく、それらしいソースあさってみますね。
描画ソフト関係をあされば大丈夫かな?
571:login:Penguin
04/10/03 22:52:41 b13aFboP
質問お願いします。
テキストエントリを使って、文字列を取り込みたくて
const char *str = gtk_entry_get_text(entry);
wcahr_t wstr[100];
mbstowcs(wstr,str,100);
としたのですが、テキストエントリに"aaa"と入力して取り込むと正常に
wstrの中身が"aaa"となるのですが、"あああ"と入力して表示させると
文字化けが発生します。
mbstowcsの返り値を調べると-1になっているので正しく変換できてないと
思われるのですが。
もしかしたら、テキストエントリは2バイト文字は扱えないのですか?
どなたか教えてもらえないでしょうか。
572:login:Penguin
04/10/03 22:59:18 NMHtHT7k
setlocaleとか実行してるか?
573:571
04/10/03 23:22:17 b13aFboP
>>572
はい、setlocale(LC_ALL,"ja_JP.eucJP")とやっております。
574:login:Penguin
04/10/03 23:37:40 NMHtHT7k
gtk_entry_get_textの返り値はUTF-8ではないかと。
それをEUCモードのmbstowcsで実行するからエラーになると。
setlocaleでUTF-8を設定するか(これは他の関数で面倒なことになりそう)
g_locale_from_utf8でUTF-8からカレントロケールに文字列を変換するか。
575:571
04/10/04 00:04:10 5lyoB5Xl
>>574
なるほど、そういうことでしたか。
私の作っているプログラムではeuc形式のファイルからの文字列の
読み込みもやらなければならないので、後者の方でやってみます。
アドバイスありがとうございます。
576:login:Penguin
04/10/04 00:14:40 1mgqe0pP
>>571
char *str = gtk_entry_get_text(entry);
char *locale_str = g_locale_from_utf8(str);
wchar wstr[100];
wprintf("%s", wstr);
wbstowcs(wstr, str, 100);
strの中身はUTF-8 まんまなので
まずiconvなりglibの文字列変換関数(実質iconvのラッパ)で適当に変換する
577:login:Penguin
04/10/10 18:05:08 zn9N0S8U
GTK+ 2.4.11 Released
578:login:Penguin
04/10/13 08:07:25 0RBMkwen
GLib リファレンスマニュアル (2.4.7版)
URLリンク(www.gnome.gr.jp)
GObject リファレンスマニュアル (2.4.7版)
URLリンク(www.gnome.gr.jp)
579:login:Penguin
04/10/13 08:50:09 fnawd3gt
gtkはCで書かなきゃいかんのがめんどい
580:login:Penguin
04/10/13 09:10:05 EBUt+ZnU
>>579
pygtkでも使え
581:login:Penguin
04/10/13 10:32:39 fnawd3gt
C++がいい
582:login:Penguin
04/10/13 12:16:04 i0k9Byx8
GTK+ - Language Bindings
URLリンク(www.gtk.org)
583:login:Penguin
04/10/21 22:11:24 nRPw1OZd
ウィンドウのタイトルを右クリックするとメニューが出てくるように、
ウィンドウマネージャで設定されています。
この時、gtkで一部のウィンドウのメニューを違うメニューにしようと思ったのですが、
_GtkWindowにも_GdkWindowにも操作できるような要素が見当たりませんでした。
どなたかメニューを操作する方法をご存知の方いらっしゃいませんでしょうか・・・
584:login:Penguin
04/10/22 22:33:32 eUY5i1x7
ウィンドウタイトルの所で出るメニューは、作ってるアプリの管轄外だと
思うんだけど。違う?
585:login:Penguin
04/11/07 00:08:40 A8KZGfM+
ウィンドウタイトルないウィンドウマネージャもあるしね。
もし可能だったとしてもアプリケーションが操作すべき場所じゃないと思う。
586:login:Penguin
04/11/09 02:11:59 R4ut9ZNk
Tutorialみてbutton押すとlabelの表示が変わるぐらいは出来るようになったのですが、
gtk_label_set_text(GTK_LABEL(label), "test1");
sleep(1);
gtk_label_set_text(GTK_LABEL(label), "test2");
みたいに処理に従ってlabelを書き換えるようなのは、
どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。
587:login:Penguin
04/11/09 06:18:13 t6yHsCJv
>>586
#!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject
count = 0
def greet(widget): print 'Hello!'
def deal_timeout(button):
global count
count += 1
button.set_label(str(count))
print button
if count < 10:
return True
else:
return False
button = gtk.Button(str(count))
button.connect('clicked', greet)
#timer = gtk.timeout_add(1000, deal_timeout, button)
timer = gobject.timeout_add(1000, deal_timeout, button)
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(button)
window.show_all()
gtk.main()
588:login:Penguin
04/11/09 07:49:39 t6yHsCJv
>>586
>どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。
Windowがマップ(show)されるまで、Labelは表示されないよ。
set_textてコールバックのなかでやってる?
589:login:Penguin
04/11/09 07:50:30 t6yHsCJv
>>586
ごめん、ボタンラベルではなくだだのラベルを書き換えだね。
それから、pygtkで済まん。
#!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject
count = 0
def deal_timeout(label):
global count
count += 1
label.set_text(str(count))
if count < 10:
return True
else:
return False
label = gtk.Label(str(count))
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(label)
window.show_all()
#timer = gtk.timeout_add(1000, deal_timeout, label)
timer = gobject.timeout_add(1000, deal_timeout, label)
gtk.main()
590:login:Penguin
04/11/09 07:53:30 R4ut9ZNk
>>587
うっと、その例だと、
count += 1
button.set_label(str(count))
print button
count += 1
button.set_label(str(count))
print button
と二度続けてset_labelしたときに順次表示したいという気持ちで。
591:login:Penguin
04/11/09 08:33:34 t6yHsCJv
質問の意図が分かった。
おそらくmainループに制御が帰らないから中間のset_textは
反映されないのだと思う。
mainスレッドと別スレッドでset_textすればうまくいくのでは。
def callback(label):
# bigin mainとは別スレッド
global count
label.set_text(str(count))
count += 1
time.sleep(1)
label.set_text(str(count))
# end mainとは別スレッド
592:login:Penguin
04/11/09 08:41:42 Zkj7YPcz
>>590
何をしたいのかもっと具体的に書いた方がいいのでは?
593:login:Penguin
04/11/10 05:52:19 ppRcKd5W
>>590
これでどう?
別スレッドによる方法は、よした。こちらの方が簡単。
要は、set_textしたあとmain_iterationを必ず呼ぶ。
下のコード参照。
594:login:Penguin
04/11/10 05:52:58 ppRcKd5W
>>590
#!/usr/bin/env python
import pygtk; pygtk.require('2.0')
import gtk, gobject, time
def callback(button, label):
button.set_sensitive(False)
for i in range(100):
time.sleep(i%5+1)
label.set_text(str(i))
while gtk.events_pending():
gtk.main_iteration()
button.set_sensitive(True)
label = gtk.Label('-')
button = gtk.Button('Go')
vbox = gtk.VBox(spacing = 5)
vbox.pack_start(label)
vbox.pack_start(button)
window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
button.connect('clicked', callback, label)
window.set_border_width(10)
window.add(vbox)
window.show_all()
gtk.main()
595:login:Penguin
04/11/17 04:22:22 YsKYfmVj
gtk2-perlいじってみようと思うんですが、
gtk_hoge は Gtk2::hogeと言うので安直に
Gtk2::set_locale();
してみたら
Usage: Gtk2::set_locale(class)
と出る。とりあえず
Gtk2::set_locale('euc-jp');
してみると実行出来るが文字化けなおりまへん。
すみまへんが、どなたかぷりーず救いの手。
596:login:Penguin
04/11/17 07:45:19 iY7axWLS
>>595
URLリンク(www.gnome.gr.jp)
597:login:Penguin
04/11/17 09:53:38 YsKYfmVj
>>596ありがとん。
use utf8;
足してutf-8で書くだけでしたか。
けどこりゃ面倒だな。。。
598:login:Penguin
04/12/03 19:00:50 GiyN6pXi
GTK+ 2.4.14 Released
599:login:Penguin
04/12/04 18:37:51 6LgKh+yC
厨房な質問ですが教えてください。
テキストボックスに日本語入力できません。
日本語の文字列をコピペしても文字化けします。
gtk_set_locale(); の他に
setlocale(LC_ALL,"ja_JP.eucJP"); なども試してみましたが効果ありませんでした。
gtk+ 1.2 なら問題なく日本語が通るのですが、gtk+ 2.4では何か特別なことをする必要があるのでしょうか。
テキストエントリーなら普通に日本語入力できます。
GtkWidget *text; //文字化けする
text = gtk_text_new(NULL, NULL);
gtk_text_set_editable(text, TRUE);
GtkWidget *entry; //文字化けしない
entry = gtk_entry_new();
gtk_editable_set_editable(entry, TRUE);
FAQに違いないと思うのですが、どう調べても解決できません。
#メモ帳程度ならすぐできると思ったのですが、そんな甘いものではないのですね。
600:login:Penguin
04/12/04 18:59:58 VErRj59z
>>599
URLリンク(www.gnome.gr.jp)
601:599
04/12/04 21:48:41 6LgKh+yC
text = gtk_text_new(NULL, NULL);
ではなく、
text = gtk_text_view_new();
でやってみたら、日本語が使用できました。
gtk_text_new はもしかしてobsolete ?
>>600
参考になりました。(難解すぎてあまり理解できませんでしたが)
602:login:Penguin
04/12/04 22:01:56 9FhprA6L
マニュアル読みながらやってないのか? 1.2 から 2.0 になる時にけっこう
変わってるよ。
Warning
GtkText is deprecated and unsupported. It is known to be buggy. To use it, you must define the symbol GTK_ENABLE_BROKEN prior to including the GTK+ header files. Use GtkTextView instead.
603:login:Penguin
04/12/08 13:42:17 s2a0TgVZ
質問です。
画像ファイルを表示させたいのですが、pgm形式の出力の方法がわかりません。
xpmしか出力できないのでしょうか?
604:login:Penguin
04/12/08 17:44:12 RUzeNZBB
>>603
>xpmしか出力できないのでしょうか?
gdkpixbuf でたくさんのフォーマットに対応してるが、 pgm が対応してるか
どうかはしらん。
605:login:Penguin
04/12/09 01:42:01 8bxaruuu
GTKを使ったアプリケーションを作ってみたいと思っているんですが、
おすすめの入門書などはありますか?
当方、VisualStudio+C言語+Win32APIならたいていの物は作れる程度の知識ですが、
Linuxは初心者です(´・ω・`)ショボーン
>「GTK+・GDKによるLinuxアプリケーション開発」
近所にこんな本があるんですが、どんなもんでしょうか。
606:login:Penguin
04/12/09 02:28:34 9Rw7z+2N
最新のGTK+に対応してる本がよさげ。
607:login:Penguin
04/12/09 04:27:08 R51KLcmk
>>606
Gtk2に対応してる日本語本ってあるの?
あるなら折れも欲しい。
>>605
CとWin32APIを好き勝手できるのなら
URLリンク(www.gnome.gr.jp)
ここを一通り見てみるのもそう苦じゃないと思う。
GTK+以外のところ、つくりたいものの根っこの処理なんかは
システムコールとか解説してる本を一読しておく必要があると思うが、
そういう本はわりと見掛ける。
ガンガレ!
608:603
04/12/09 12:34:15 wvxh3lvA
>>604
ありがとうございました。おかげで解決できました。
609:login:Penguin
04/12/09 23:37:09 8bxaruuu
>>606
>>607
ありがとうございます。参考にします(´・∀・`)
610:login:Penguin
04/12/17 15:43:49 +/93qx7Y
gtk+ 2.6.0
611:login:Penguin
05/01/10 02:06:52 W1Pzi+ZV
ショートカットとして "Shift+Ctrl+a" というキーを割り当てるには
どうすればよいでしょうか?
gtk_widget_add_accelerator の第5引数に
GDK_SHIFT_MASK|GDK_CONTROL_MASK
というように指定しても、コンパイルで
invalid conversion from `int' to `GdkModifierType'
と怒られてしまいます。
612:login:Penguin
05/01/10 03:15:43 lP2Bwze9
URLリンク(equis.ya.com)
613:login:Penguin
05/01/28 21:39:23 fhQu+EL0
Linux上でGtk+2アプリケーションのWindows実行形式(*.exe)を構築する方法を
まとめてみますた。
URLリンク(win2linux.sourceforge.jp)
614:login:Penguin
05/01/31 14:32:47 nk2PSUal
>>613
おおっ!
build-cross.shを試してみようと思うのですがこれってPREFIX変えれば
rootにならなくても動きます?
615:614
05/01/31 16:16:04 nk2PSUal
>>614
>build-cross.shを試してみようと思うのですがこれってPREFIX変えればrootにならなくても動きます?
自己レス.できました.
>>613
いいっすね.スクリプトもページも勉強になりました.
感謝!
616:login:Penguin
05/01/31 21:21:11 rpwtgdcM
613ですが、libxml2とlibxsltについては、もう少し、入れ方に工夫が必要そうです。自分で
*.pcをでっちあげるというのも手かもしれませんが。ということで要研究です。
617:login:Penguin
05/02/24 14:05:33 opcJ4VYg
>>11
> こんくらいの英語がわからんよーじゃLinuxは使えんよ。
Linuxのドキュメントは英文のなかでも難解な部類に属すると思われ
618:login:Penguin
05/02/26 01:35:42 ioiQR6vn
日付の書式設定をgettextizeしようと思って、
日付の書式をstrftimeに渡す前に g_locale_from_utf8 で
utf8な文字列に変換してから渡してるんだけど、
何故か g_locale_from_utf8 が0x0な値しか返してくれません。
こんな感じの処理がしたいんだけど、
1.const で _("%B %Y") と書式を指定
2.po には "%B %Y年" と記述
3.g_locale_from_utf8 で文字コードを変換
4.strftime の format に上記を指定して日付をゲト
もしかし po で変換されて帰ってくる文字コードってutf8固定じゃないのかな??
619:login:Penguin
05/02/26 13:17:05 Rle58e5G
panedの素婦りったのサイズの取得方法をご存じの方、ご教示ください。
620:login:Penguin
05/02/28 19:03:23 QS7g1csz
>>618
bind_textdomain_codeset() で UTF-8 を指定していますか?
デフォルトでは locale encoding で返ってきます。
621:618
05/02/28 22:17:53 IaK5xt0q
>>620
ソースを見たら、bind_textdomain_codeset(EPN, "UTF-8"); となっていました。
色々試してみた結果、一旦「poに日本語訳の無い書式」を選んでおいて、
その後に「日本語訳の有る書式」に切替えると、一旦は正常に反映されるんだけど、
アプリを終了して再起動しようとすると SEGV を起こしてしまいます。
一旦は正常に動作することから、const で記述した文字列を gettextize している部分で、
メモリの確保が上手くいってないような気がしてきました。
どうやって確認したら良いんだろう…。
622:login:Penguin
05/03/01 03:22:58 4G9qSY/D
>g_locale_from_utf8 で
>utf8な文字列に変換してから渡してるんだけど、
g_locale*_to*_utf8じゃないと「utf8な文字列に変換」はできねえんでねえかい
623:618
05/03/01 19:23:49 4zQ3kAWS
>>622
ごめん。書き間違った。
(誤)g_locale_from_utf8 で
(正)g_locale_to_utf8 で
ちゃんと書くと、最初に g_locale_from_utf8 でカレントロケールに変換してから、
strftime に渡してやって、結果を g_locale_to_utf8 で再度変換してから
label を作ってます。
624:login:Penguin
05/03/03 02:17:43 g8vCaa7b
gtk でウインドウの x ボタンを押しても閉じないようなウインドウを
作るにはどうしたらいいですか?
625:login:Penguin
05/03/03 18:04:13 Gfb84io7
>>624
"delete_event" の callback 関数で TRUE を返すようにする。
626:login:Penguin
05/03/03 20:39:00 g8vCaa7b
>>625
サンクス!
627:618
05/03/03 21:48:02 Fxm/rLTz
>>623
自己レスです。
MLで聞いたら、_()マクロの代わりにN_()マクロを使えと教わりました。
結局、const 中の メッセージを const char *msg = { N_("hoege")}; に変更しておいて、
あと sprintf(str,"I am %s",msg); を
sprintf(str,"I am ");
strcat(str,_(msg));
とすればOKだった。
全然GTKに関係無かっただよ。スマソ。
628:login:Penguin
05/03/14 14:58:26 YLJBAcu4
すいません。
Gdkのgdk_draw_polygonとかの関数で描画する図形の色を
半透明にして表示する事ってできますか?
当方FedoraCore3のGtk2.0で作成中なのですが
やり方がわからずはまっているところです。
アルファ値の設定ってどっかでできますかね???
宜しくお願いします。
629:login:Penguin
05/03/14 15:32:30 bODZhmWq
gtk2 でプログラミングしてます。
ボタンやラベルの色を個別二変更できなくて困ってます。
方法をおしえてーーーー!
それとフォントの変更も個別にできないんです。
630:login:Penguin
05/03/14 23:49:50 9KHOi9Md
>>628
libgnomecanvas使ったほうがいいかもしれない
631:login:Penguin
05/03/21 12:28:53 HsH5YBrh
632:login:Penguin
05/03/21 12:30:23 uGHm3JkC
633:再描画
05/03/24 21:33:44 K5TJHYPW
こんばんは、質問いいですか。
gtkとpthreadを使ってプログラムを作ってます。
メインスレッドはgtk_main()に行ってて、
作成されたスレッドの方でWidgetに変更を加えます。
(GTK_LABELの文字を変えたりとか)
ところが、変更した時には直ぐに結果が表れません。
マウスポインタがボタンの上に行ったり、他のソフトを起動したりすると
変更されるのですが、放置しておくとそのままーでいてます。
強制的に再描画してみようと思ってWidgetいじった後に
system("xrefresh");
してみたら思った通りに動いてくれました。
でも普通は何か別のそれ用の関数を使うんですよね。
何を使えばいいんでしょうか。
634:login:Penguin
05/03/24 21:55:49 w4FsQjjW
gdk_flush() してみるとか
635:login:Penguin
05/03/24 21:58:19 /mf/WXIK
>>633
それはスレッドにする必要があるからそうしてるのか?
gtk_main()に突入したら戻ってこないという理由だけで
スレッド化しているなら、スレッド化せずに
gtk_add_timeout使ってコールバックルーチンのほうで描画するとか。
636:再描画
05/03/24 22:05:36 K5TJHYPW
>>634
例のxrefreshしている行を
gdk_flush();
で置き換えてみました。
んー、うまくいきません。ごめん。
今、xrefreshのソースを見てみようとxfree86のソースを落としてます。
ナローバンドなので作業は明日になりそう(T-T)
637:再描画
05/03/24 22:10:39 K5TJHYPW
>>635
ちょっとtimeout使ってみて何か上手く行かなかったから
thread使ってみたんですが、
考えてみればスレッドにする程のもんでもないかも。
もう少しtimeoutで粘ってみる。
繰り返す必要が無いならidle_addの方でもいいのかな。
638:login:Penguin
05/03/24 22:32:33 ir5d0pxX
>>633
URLリンク(developer.gnome.org)
これじゃダメ?
gtk-thread.cを試したらラベルの書き換えできてるようだけど。
639:再描画
05/03/25 00:26:27 i+2vihm2
timeoutで書き直した。成功!!
と思ったら、ボタン(処理を中止するボタンつけてるの)が押せなくなってるっ!
ボタン押しを処理するべきものがお忙し中になっちゃうのかな。
折角情報いただいたのでthreadの方ももう少し粘ってみる。
なんかスレッドっていろいろあるのね。
gdk_flushを手がかりにあちこち読んでみた。
g_thread_init(NULL); を入れたら上手く行った。あれ? flushなくても大丈夫だ。
・・・なんか私、凄く馬鹿だったかも。
>>638
読んでみます。ありがとう。
640:再描画
05/03/25 00:56:18 i+2vihm2
少し訂正。
[誤] g_thread_init(NULL); を入れたら上手く行った。
[正] g_thread_init(NULL); をgtk_main(); の前に入れたら上手く行った。
641:再描画
05/03/27 20:09:54 +oexgFcZ
>>638 のページ、参考になりました。
GUIと関係ない部分での同期処理と複数のスレッドから再描画する時の
同期処理(Widgetをとりあわない様にする事)は別だったんだなぁ。
とりあえず完成しました。ありがとう!!
642:再描画
05/05/01 10:24:56 RRZjWKpR
Linuxでのプログラミング学習です。
こんな問題をいきなり授業で出題されました。
まだほとんど何もやってないので、さっぱり
意味が分かりません。分かる方がいらっしゃるなら、
回答の方教えてはいただけませんか?
f(x)=xの2乗-xy-yの2乗 について
x=-0.423 y=1 の時の値を(小数点第4位までの表示)
で求めなさい。ただし、変数x,yの値はscanf文で
入力させてください。
643:login:Penguin
05/05/01 10:31:25 ua7T6e16
>>642
板違い
644:再描画
05/05/01 10:34:34 RRZjWKpR
どこに行けばいいですか?
先ほども別の板で言われてしまいました。
645:login:Penguin
05/05/01 10:54:47 fDqSGSeJ
本屋さん
646:login:Penguin
05/05/01 11:25:35 ZutXiTEl
>>642
scanfてーからにはC言語だと思うが、プログラミングを習得する気も学習能力もないみたいなので
プログラム板の宿題丸投げスレをお薦めする。
スレリンク(tech板)
647:再描画
05/05/01 11:57:32 RRZjWKpR
ありがとうございます
648:glade勉強中
05/05/02 06:24:53 3JWzQ4cI
gladeを使用時して、コールバック関数にユーザデータとして
widgetを渡す方法を教えてください。よろしくお願いします。
現状生成されるコード: interface.c
g_signal_connect ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
NULL);
生成したいコード: interface.c
g_signal_connect ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
GTK_OBJECT (entry1));
やりたいことは、ボタンが押されたときにentry1の内容を操作することです。
mainから操作するという方法もあるのですが・・・
649:login:Penguin
05/05/02 18:23:05 PZ6xqLwA
button1 のプロパティウィンドウ出して、シグナルのところに書くだけでは?
glade はウィジットの表示見本程度にしか使ってないから、違うかも…
650:login:Penguin
05/05/04 22:53:32 6VJhx7bu
同じく勉強中ですが、
ソースのg_signal_connect()の最後のNULLを手動で書き換えるしかなさそうです。
プロパティ窓の"シグナル"の中には、g_signal_connect()のdata引数に当たる部分を
指定する欄は(バージョン2.10.0の時点で)ありませんし、
entry1を"オブジェクト"のところに書くと
g_signal_connect_swapped ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
GTK_OBJECT (entry1));
が生成されてしまいます。
651:再描画
05/05/07 00:09:31 fZ/PdFpz
>>642
何でその名で書き込みますか。
何の罠ですか。
私は>>633の「再描画」です。
同一人物に思われるじゃなかですか。勘弁してくださいよ、もう。
652:login:Penguin
05/05/07 09:25:01 wZZgaFg6
カブるのいやならトリップつけとけ。
653:login:Penguin
05/05/07 12:29:43 FaaicVGA
コテハンでもないのに、いちいちトリップ付けられるのうざい。
654:login:Penguin
05/05/07 23:39:55 lWepT/vx
えー、gladeの話に戻すとするか。
私も g_signal_connect()の最後は手動で書き換え。
>>648 の例だと NULLを単純に entry1にするかな。
interface.cは最初にgladeが生成したのから随分変更するので
ある程度コード書きが進行してからまたgladeに頼りたい時は、
別の所にコードを出力しておいて両interface.cをdiffして
ちまちま書き換えてる。
655:login:Penguin
05/05/08 00:01:51 cuTcQAVH
とりあえずのものであれば、
シグナルハンドラ(on_button1_clicked())内で
lookup_widget()を使ってentry1を取得するのもありかと。
656:login:Penguin
05/05/08 11:08:08 yrqPYh5d
もしlibgladeを使うのなら、gladeが生成するXMLファイルから
glade_xml_get_widget()でentry1を取得すればOK。
(もしくは一度glade_xml_get_widget()で取得したentry1を
glade_xml_signal_connect_data()のuser_dataとして渡す)
gladeファイルを何度も変更すると、Cソースをその都度出力してdiffを・・・と
手間がかかってしまうので、楽ができます。
657:glade勉強中
05/05/08 23:25:53 YB00BN6K
648のwidgetを渡す件ですが、
gladeが、生成する support.h 内の関数 lookup_widgetを用いて、
コールバック関数を内でwidgetを検索して取得することができました。
GtkWidget *entry = lookup_widget(GTK_WIDGET(button), "entry1");
gtk_entry_set_text (GTK_ENTRY(entry), dirname);
658:login:Penguin
05/05/28 11:21:51 o6s+/jnw
GTKについて勉強中なのですが、
HTMLのTABLEタグのような表を作成するにはどうするのが一番いいのですか。
GtkTableのうえに複数のGtkEntryを配置するのが普通?
659:login:Penguin
05/05/28 19:05:54 ALWgONN6
表示するだけ…じゃないよな
スプレッドシートっぽいのがやりたいときは専用のウィジェットがあったはず
URLリンク(gtkextra.sourceforge.net)
660:GTK初心者
05/05/29 16:11:34 8OqUCAcQ
gint mainと
int mainの
違いを教えて下さい。
661:login:Penguin
05/05/29 16:32:38 BEeLFlJy
sizeof(int)はマシンによって違うけどsizeof(gint)はどのマシンでも同じになる
が、mainをgintにすべきかと聞かれると…微妙
662:login:Penguin
05/05/29 18:20:24 8OqUCAcQ
ボタンをクリックして
そのボタンを押した数をウィンドウ上に表示させる
プログラムを教えて下さい。
663:login:Penguin
05/05/29 18:52:06 sBgcA4li
>>661
gint main()にしたらダメでしょ。
gintがint以外に置き換えられる場合はwarningになるんだから。
664:login:Penguin
05/05/29 20:08:11 y1WOFjTT
>>662
どこまでできていて、どこで詰まってるのか?
665:662
05/05/29 20:33:21 8OqUCAcQ
>>664
callback関数の
gpointer data
をどうしたらよいかわかりません。
666:login:Penguin
05/05/29 22:41:47 y1WOFjTT
>>665
ラベルに表示するならボタンのコールバックを
g_signal_connect(button, "clicked", G_CALLBACK(clicked_cb), label)
とかしといて
コールバック側で
label = GTK_LABEL(user_data)
とか受けとけばどう?
667:662
05/05/29 23:13:36 8OqUCAcQ
>>666
m(__)m
ありがとうございます。
やってみます。
668:login:Penguin
05/05/30 20:14:27 EDgWxmRU
>>659
まさに、こんなのを探していました。
ありがとう。
ダウンロードして試してみます。
669:login:Penguin
05/06/22 21:07:00 xe7y7k0v
昨日からgtk勉強してるのですがわからないことがあるので教えてください
1つのグループのラジオボタンを3つ作って、それをA,B,Cとします。
次に一つ普通のボタンを作って、
Aを選択中にこのボタンを押したらA関数が、B選択中はB関数が実行される・・
というプログラムを作りたいのですが、どのように考えればよいのでしょうか??
670:login:Penguin
05/06/22 21:16:32 qMKsIvq9
>>669
普通のボタンが押された時に呼ばれるコールバック中で、どのラジオボタンが
選択されてるか判定して・・・・、gtk の話でない気がするがどの辺がわからんのよ?
671:login:Penguin
05/06/22 21:34:03 xe7y7k0v
>>670
コールバック中に判定する方法がわかりません
自分でいうのもなんですが、基本がわかってないと思います。
672:login:Penguin
05/06/22 21:54:13 qMKsIvq9
user_data でもグローバル変数でも好きなので、
状態をいれた変数かボタンを渡す。
673:669
05/06/22 22:04:18 xe7y7k0v
もう少し考えてがんばってみます
参考書なしで、ネットで調べてやってるんですが
やはり参考書は買ったほうがいいですかね?
674:login:Penguin
05/06/22 22:10:13 qMKsIvq9
いい本ないから・・
ネットで gtk2 のチュートリアル見るのがいいと思う。
675:669
05/06/22 22:19:39 xe7y7k0v
>>674
そうですか・・・
さっきの問題は解決しました
Aを押したらint NUM=1、BならばNUM=2として
普通のボタンを押した関数のなかでNUMが1ならばA関数・・・
というようなのでいちおうできました
もっと高度なテクとかあるのかもしれませんが。。。
ありがとうございました
676:login:Penguin
05/06/23 01:50:52 jw4l769e
GTK+をいじり始めて間もない初心者なんですが少しお聞きしたいことがあります。
ビデオキャプチャプログラムのようなものを作っていて、キャプチャした画像を
pixbufに突っ込んでリモートのXクライアントで表示する場合、リアルタイム(30fps)での
表示がキツイです。画像データを圧縮して転送するオプションみたいなものはありませんでしたでしょうか?
677:login:Penguin
05/06/23 02:58:12 jw4l769e
説明が足りてない気がするので補足。
GTKはver1.2です。リモートではない場合、描画は2ms程度で終りますが、
リモート(LAN内)では30ms前後かかり、他の処理を含めるとリアルタイム表示(33ms)は
微妙に無理といった感じです。
画像は320x240、24bitRGB、毎秒30枚と考えると、無圧縮では最低でも7MB/sもの
帯域が必要な計算になります。圧縮できるようなことをどこかで見た気がするのですが
気のせいでしょうか??改めて探してみたのですが見つかりません。
678:login:Penguin
05/06/23 20:12:38 MHRUW0Sb
gtk 関係ないんじゃないの?
7MB/s ってことは RGB 生データ?それならなおさら gtk 関係ない気がするが。
679:676,677
05/06/25 21:14:27 O58VWF1R
>>678
7MB/sは生データですよ。30msってのはキャプチャにかかる時間を除いた、
表示(ネットワーク転送含む)するのにかかる時間ですので少なくとも
X関連であることは間違いないです。
自マシンで表示する場合はわずか2ms程度で表示できることからも明らかです。
680:login:Penguin
05/06/26 00:23:14 bkhj+VqI
textviewで選択範囲の指定はどうすればよいのでしょうか? 選択範囲の取得の方は
gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end);
で、出来るようですが。ちなみにやりたい事はある地点1から地点2までの範囲の文字列をクリップボードに記憶する事です。
681:login:Penguin
05/07/05 04:57:38 0YaxXABQ
gtk2.0 C言語にてプログラムを作っているのですが行き詰まってしまいました。
メニュー専用の関数を作り、トップレベルウィンドウのウィジットを渡してメニューを生成しているのですが、
その関数の中でメニューのあるアイテムが押されたときのコールバックとして、リストのアイテムやラベルの文字列等を
変更したいと思っています。
ラベルやリストなどのウィジットの取得方法がわからないのですがいい関数ありませんでしょうか?
ご教授よろしくお願いします。
682:login:Penguin
05/07/05 05:09:08 0YaxXABQ
訂正です
トップレベルウィンドウのウィジットを渡して
↓
メインで宣言したメニューバーウィジットのポインタを渡して
ウィンドウのウィジットはlookup_widgetやget_widget関数が使えないか
試したときの名残でした。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4040日前に更新/255 KB
担当:undef