GTK+プログラミング
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>98
> まだGTKのシグナルがどんなタイミングで発行されるのか、よく理解できていないので
> 誤解しているかも知れませんが。
どう考えてもこれがガンだろ。呆れた。 >>99
色々、考えて下さり、ありがとうございます。
>>100
まあ、そう言わんで下さい。
皆さんに教えて頂いたことをヒントに、時間が取れるときに
もっと勉強しようと思います。
レスをしてくれた方々、ありがとうございました。
複数のファイルをユーザーに選択させ、そのファイルのパスをリストなり
配列なりで得たいと考えています。
調べてみたところ GtkFileChooserDialog は単一ファイル|ディレクトリ
にしか対応していないようなのですが、上記のような機能は自前で実装す
るしかないのでしょうか。 >>102
gtk_file_chooser_set_select_multiple()
gtk_file_chooser_get_filenames()
の組み合わせじゃ駄目なのかい? >>103
ありがとうございます。完璧に私の調査不足でした。
教えていただいた方法でいけそうです。
glade3の最新版にしたらいつの間にかGtkBuilder形式でも出力できるようになってたよ。
さすがにウィンドウ別に分けて出力はしてくれないけど。 PyGTKでランチャー作ってます
ホットキーから呼び出すにはどうすれば
やはりgconf弄らないと無理なのでしょうか。 どのウィンドウがフォーカスされている状態でもキー操作で呼び出したいってこと?
そりゃXならウィンドウマネージャの仕事だ。 >>107
そうです
どんな操作してるときもホットキーから呼び出したいので
PyGTK以外の言語は全く解らんのですがXLibあたりですかね
これさえ備えられればほぼ完成なんです
ありがとうございました。もう少し調べてみます >>108
それ俺も知りたい。分かったら教えてくれ。 >>108
ウィンドウマネージャにショートカットで任意のプログラムを呼び出すような
親切機能がついていればできる、なければ基本的にできない。 こんなんでどうよ
#!/usr/bin/python
import gtk, gobject
import Xlib, Xlib.display, Xlib.X, Xlib.XK
win = gtk.Window()
win.connect('destroy', gtk.main_quit)
win.show_all()
display = Xlib.display.Display()
root = display.screen().root
root.grab_key(
display.keysym_to_keycode(Xlib.XK.XK_a), # keycode
Xlib.X.ShiftMask | Xlib.X.ControlMask, # modifier
True, Xlib.X.GrabModeAsync, Xlib.X.GrabModeAsync)
display.sync()
def check(*args):
ev = display.next_event()
if ev.type == Xlib.X.KeyPress:
print (ev.detail, ev.state) # (keycode, modifier)
win.present()
return True
gobject.io_add_watch(display, gobject.IO_IN, check)
gtk.main() >>109-110
自分が得た情報はもちろん共有しますよ
ウインドウマネージャってubuntuだとcompizでしたっけ?
WindowsだとpyHookなんてのがあって楽そうなんですが
>>111
走らせてみました
小さなウインドウは出ましたが、こちらではキーに反応しません
a, <shift>a, <ctrl>aはダメでした。他のキーですか?
個人的にはこの辺が怪しいと思っていたのですが
ttp://faq.pygtk.org/index.py?req=show&file=faq23.009.htp
ttp://manpages.ubuntu.com/manpages/feisty/ja/man3/XGrabButton.html
ttp://xjman.dsl.gr.jp/X11R6/X11/CH12.html
PyGTKって日本語のドキュメントが少ないと思っていたけど
それ以前にドキュメントの絶対数が少ない気がしてきた >112
xbindkeysのソースが参考になるかもね。
でもgdkとgtkだけで済ませたい気もする。 >>113
これCですか?現時点では意味不明でした。
やはり最低でも2言語くらい習得しないと細かい所が弄れませんね。
>>114
それも試してみましたが何故が無反応でした。
さらに一週間くらい調べてみます。 glade3といえば日本語メッセージの翻訳が迷訳てんこもりで参った記憶しかないぞ。
ありゃGTK+プログラミングろくに理解してない奴が訳してるんだろうなあ。 出版界を見ると、GTK+よりもQtの方が元気があるように見えるんだけど、
ユーザ数ではどうなんだろう。日本でも最近出てる本はQtのだよね。 出版ではQtだが、実際にはgtkのほうが人気がある。
ユーザ数でもおそらくgtkのほうが多い。
なぜQtの本のうほうが多いのかは謎。
gtkの本ってなんであんなに少ないんだろうか。 一つの指標として
gnome vs kde
ttp://www.google.co.jp/trends?q=GNOME%2CKDE&ctab=0&geo=all&date=all&sort=0
gtk vs qt
ttp://www.google.co.jp/trends?q=gtk%2Cqt&ctab=0&geo=all&date=all&sort=0
ちなみにノルウェーではgnomeの人気が高いw ネット上のドキュメントが充実してるからとか? 洋書も最近のはQtの
が多いよね。
日本GNOMEユーザー会とKDE ホームページ(日本KDEユーザ会)の
サイトを比べてみると、一見KDEの方が勢いがあるように見えるけど、
リンクのメンテがボロボロだな。 Ubuntu人気があるからgnomeのほうがユーザ多そうだけどな、実際どうなんだろな。
あと他言語のバインディングではgtkのほうが優勢な気がするんだがどうなんだろ。
QtHaskellとか使ってる人いる?俺はgtk2hs使ったけど使い物にならなかったよwww必要関数無くてwwww。
Ubuntu, Fedora, Debian, Vine(笑)とか標準ではたいがいgnomeだからね。
やっぱシェア(数)はやっぱgnomeが多いんじゃないの?
KDEはOpenSUSE, Mandriva(turbo)とか。
まぁ前出のgnomeトリはたいがいKDEの派生つーかブランチもあるし
入れ替えたって(共存させたって)いいんだけどね。
ユーザーはともかく、クリエータはGTK(GNOME)の方が多いだろう
GTKがLGPLなのに対して、QtはGPLか最近のtool kit としては高額の
有償ライセンスかのいずれか
利用できる人間は、どうしても限られてくる 欲しいソフトがないから自分で作ろうと思う。
だが、どの言語もソースは読める程度、簡単な改造が出来る程度のレベルです。
だが、一からあのソフトを作りたい・・・。
そんな俺はどのようなGTK開発環境が良いとおもいますか?
今考えているのは、
Pygtk + grade の組み合わせです。
これを薦めるハッカーが多いのと、Pythonという言語がしっくりくるからです。
ほか、初心者におすすめのGTK開発環境がありましたら教えて下さい。 まあそのへんより簡単なのは無さそうだよね。自分はRubyが好きなので
Rubyで勉強してるけど。 vte-0.17.4 を ./configure && make && make install してみたのだけど, 画面端で漢字入力を始めると, 折り返しも延長もしてくれず, 入力文字が見えなくなる.
| ▽かんじに|
のように. でも次のようになってほしいのだけど,
| ▽かんじに|
|ぅりょく |
とか. gtk-demo の text-widget の multiple views などはうまくいってます. .gtkrc-2.0 とかに何か設定が必要でしょうか?
ところでpygtkって遅くね?
Core2Duoのマシンでボタンクリックしてからレスポンスが10秒後とかザラなんだが。
gtkmmとか生のgtkのほうがいいんじゃね? こちらのサンプルは PyGTK + glade3 動きました。
ttp://palepoli.skr.jp/content/python/window1.php
でもここから先が進めません。
PyGTK + glade3 で勉強になるサイトがあったら教えて下さい。
英語でもいいです。宜しくお願いします。 >>136
ありがとうございます。
参考になりました。 C++/GTKで書いたプログラムを
wxPythonで書き直したら
wxPythonで作った方がサクサク速く動いた orz
いまさらかもしれないが時代は今CAIROだということに気づいた
http://journal.mycom.co.jp/series/firefox/005/
プラットフォームやハードウェアに依存せず精密な描画が可能になるらしい
CAIRO使えるのはGTK+2.10から上のver
誰か使ってる人いる? 時代を読み違えてるな。
ベクトルベースとか3DデスクトップとかVistaとともに沈んだよ。
PC肥大化狂騒曲は終わりだ。Qt4も総スカンだし いやでも実際有名どころで使われてるわけだし
それに素のGTKのみで描画するより処理速度は速くなるし,
プラットフォーム間の互換性も高まると思う
別に肥大化してるわけじゃないしVistaや3Dデスクトップとはちょっと違うだろう
gtkがcairoをサポートしてまだ日も浅いしむしろ今からが勝負 ふつーに使ってる。フォントの取り扱いがプラットフォーム中立にできればなおいいのだが。 Cairo のフォント描画は Windows 上だとジャギが目立つ。Linux 上では問題無し。
何か設定がいるのかしら。 普通ベクトル・グラフィクスにジャギーは発生しない
なにか間違ってることは間違いない >>144
速くなるって、なんかベンチの結果でもあんの?
skiaを用いているgoogle chromeのcanvasが爆速という話なら聞いたことがあるが
>>146
普通にcairoをコンパイルすると、Windowsではcairo-win32-font.cが使われる
これは普通にGDIを用いているので、普通のWindowsアプリのフォントの
レンダリングと全く同じ結果になる
一方LinuxではFreeTypeが使われる >>148
firefox2とfirefox3の速度比較は
確証を裏づけるものにはならないか?
一般的にラスター描画よりベクトル描画の方がデータ数が少なく、描画速度は速いと言われているし
ところでskiaて何? >>145-146
フォント描画にはPangoを使えばいいんじゃないの?
>>150
ttp://www.hyuki.com/yukiwiki/wiki.cgi?VectorDrawing
skiaは
google chrome skia
あたりでぐぐれ >>153
これはハードウェア実装のOpenGLによるベクタ描画と
ソフトウェア実装のcairoによるベクタ描画の実験結果だな...
ハードウェア実装だとプラットフォームやハードウェア環境の影響を受けるが
ソフトウェア実装より格段に速度を上げられる
だからこそcairoにもOpenGLによるハードウェアアクセラレーションのサポートがあるわけだが...
でもビデオカードやらのGPU性能依存というのは
それこそ3DデスクトップやらVistaやらのPC肥大化狂騒曲じゃないのか?
ハードウェア実装を否定してるわけじゃないが
これはアリなの?
そこのところどうなんよ? >>154
んー
それを言うなら、GDIだってハードウェアアクセラレートされていて、
GDIがソフトウェアでエミュレートされるようになったWindows Vistaでは
実際描画が遅いのなんのと騒ぎになっていたわけだろ
cairoは、下のレイヤの上に乗っかって、アンチエイリアス描画を行うから、
一般的には下のプリミティブをそのまま用いるのではなく、
pixmapの上にソフトウェアレンダリングを行う形になる
だから結果は綺麗だが、それが高速化につながるという意見はさっぱりわからんね
皮をかぶせれば、ポータビリティは高まるかもしれんが、速くなるわけがないよ
個人的にちょっと試した限りでは、少なくともWindowsで普通にコンパイルした
cairoは、遅いといわれるGDI+よりもまだ遅いぐらいだ
同種の競合ソフトのaggと比べても、やはり遅いな cairoの下のレイヤって何?
cairoはGTK+/GDKやXlibの上にはない
そもそもpixmapのようなラスタデータ上にベクタデータを
ラスタライズしても綺麗な結果にはならない
Vistaが重い一番の理由はVistaのコアが4Gとかのせいじゃなかったか? >>156
> cairoの下のレイヤって何?
> cairoはGTK+/GDKやXlibの上にはない
????
cairoは何らかのバックエンド(サーフェス)の上で描画を行うわけだが
一体何を言ってるんだ
> そもそもpixmapのようなラスタデータ上にベクタデータを
> ラスタライズしても綺麗な結果にはならない
ビットマップディスプレイに、ラスタデータ以外をどうやって描画するんだ?
ベクタグラフィックスだろうが3Dだろうが、ビットマップディスプレイに
描画するときは、*必ず*2Dラスタデータに落とす(=レンダリング)
しなければ、描画のしようがないのだが、そんなことも知らないのか?
レンダリングをソフトウェアで行うか、ハードウェアで行うかは
実装の問題だがな 他の領域に落としたらそれが遅くなる原因だしな。
絵の処理なら、cpuから見えるメモリ領域のビットマップに転送が遅くなる原因のno1。
cairoは、その辺がすべてバックエンド任せでさらにメモリ上でいじるので、
普通に使うと遅いソフト(cpu)処理の部類に分類される。
てか、cairoの中身でも描画なんかは一切触れずに、cairo_surface_tで共通化とでしか使ってないと思うんだけどどう? 初めて拝見するが、
ここの良スレ度にびっくりした。 「右」キーにアクションをバインドしたいんですが、どうすればできますか?
今は仕方なく
gtk_widget_add_accelerator (foo, "activate", accel_group,
GDK_Right, GDK_MODIFIER_MASK,
GTK_ACCEL_VISIBLE);
のようにしてますが、実際は GDK_MODIFIER_MASK 無しで「右」キーのみ
で作用するようにしたいんです。 ところでさ、なんでGtkTreeViewColumnに
gtk_tree_view_column_get_widthはあるのにgtk_tree_view_column_set_widthはないの?
なんでカラムの幅を非常にまわりくどい方法でセットする事しかできないんだろう。 >>163
他のコラムに対する影響を考えないといけないからでないの? 推測だけど どうすればtoolbarを縦に位置させることができますか?
>>168
真面目に答えていただけませんか?
>>170
詳しく教えてください。
>>167
まず言語は何でプログラミングしてるの?
個人的には盛り上がって欲しいスレではあるのだけれど。
CでガリガリGTKアプリ書いてる人あんまりいないのかな… >>175
set_orientationでvertical指定
詳しくはググれ
toolbar を縦(vertical)に配置することには成功したのですが、
menubar を縦(vertical)に配置する方法が見つかりません。
// 例えば、menubar に対しては gtk_toolbar_set_orientation と同様の関数が存在しません。
どうすればできるでしょうか?
linuxデスクトップユーザーの特徴
@インストールしただけで選民思想
Aやっていることはwindowsと同じ。しかもめんどくさくなっただけ。
Bコマンド打ち込んでプロだと勘違い
C黙ってwindowsでも使ってろと間口を狭める
D素人がだのなんだのとwindowユーザーを馬鹿にする
Eカーネルいじればいいだろと無茶を要求
Flinux開発者とのずれを認識できていない
Gwineを使うくせにlinuxを再現しようとする動きがあるとたたく
冫─' ~  ̄´^-、
/ 丶
/ ノ、
/ /ヽ丿彡彡彡彡彡ヽヽ
| 丿 ミ
| 彡 ____ ____ ミ/
ゝ_//| |⌒| |ヽゞ
|tゝ \__/_ \__/ | | __________
ヽノ /\_/\ |ノ /
ゝ /ヽ───‐ヽ / / linuxはめんどくさくて難しい分だけ、
/|ヽ ヽ──' / < 自称プロが悦に浸るためのツールとして最高なんじゃないだろうかwww
/ | \  ̄ / \
/ ヽ ‐-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ もともと閲覧者が少ないスレで
自分の欲しいタイミングで回答を得ようとしてるのが間違い
半年位待ってみろ >>181
では、LinuxでGUIを作るにはどのライブラリを使うのでしょう? * 女でLinux使ってる奴 -- http://pc11.2ch.net/test/read.cgi/linux/1224332593/355
355: login:Penguin [] 2009/01/19(月) 12:20:24 ID:Zkvelgln
私は女に一番受けのいいlinuxディストリビューションを知っている。
* Gnome vs KDE -- http://pc11.2ch.net/test/read.cgi/linux/1185851003/136
136: login:Penguin [] 2009/02/01(日) 11:19:51 ID:lE4ur93H
今 C の gtk+ 使ってアプリ書いてるけど、
血反吐でそうなぐらい面倒くさい。。。
だれかもっと使いやすいライブラリ作ってくれ。。。
* 女でLinux使ってる奴 -- http://pc11.2ch.net/test/read.cgi/linux/1224332593/417
417: login:Penguin [sage] 2009/02/01(日) 12:29:52 ID:lE4ur93H
>>416
発音は「テック」。
英語ができない日本人はなぜか「テフ」と言っている。
偽の発音を使い続けるのはそろそろ止めにしないか?
本当は「イケマン」と言うべきなのに、「イケメン」
と言う日本人。もうね、アホかと。
* 女でLinux使ってる奴 -- http://pc11.2ch.net/test/read.cgi/linux/1224332593/415
415: login:Penguin [sage] 2009/02/01(日) 11:05:18 ID:lE4ur93H
>>413
○ tex = テック
× tex = テフ >>183
変な事言ってるように仕向けたいんだろうけど、
lE4ur93Hは正当な事言ってんじゃん。 ただの荒らしコピペに反応すんなよ
NG登録されて回答もらえなくても知らんぜ ファイル選択ダイアログを、ターミナルから閉じたくて、
下の処理を入れたのですが、ダイアログを閉じた後、応答が無くなります。
(GUIでキャンセルボタンや×をクリックすると正常に閉じれる)
どうすれば、ターミナルから正しく閉じれるかを教えてください。
GtkWidget *filew = NULL;
void FileSelection::destroyFileSelection()
{
status = false;
gtk_widget_destroy(filew);
} Windowsでは、自分以外のプロセスが管理しているウィンドウのハンドル(動作中のOS上で
ユニークな識別番号)を得ることができれば、そのウィンドウのサイズやデスクトップ上での
位置などを好きにいじくったりできるのですが、LinuxのGTK+(またはGNOMEもしくはX Window
System)にそのようなAPIのようなものはありますか? すみません、ageさせてください。
なにがやりたいかと言うと、特定の文字列をウィンドウタイトルに含むトップレベルの
ウィンドウに対して、デスクトップ上での表示位置やサイズを変更したりといったことです。 自己レス
libwnckてのが関係ありそうだが、Rubyから使えるんだろうか。Pythonにはそのための
モジュールが既にあるみたいなんだけど。今Ubuntu起動できないからよくわからん。 >>187
wmctrl コマンドのソースでもみればいいんじゃね? レスありがとうございます。こんなコマンドがあったんですね。自分の目的にはこれを
利用するだけで十分そうですが、ソース読むのも勉強になって面白そうですね。
結果的にスレ違いになってしまってすみません。 だれか clispからgtkを使う方法を教えてください
本気で聞く
おまえらはどうやってGTK+勉強なさいましたか? >>194
GTK+ソース付属のexamples+demosを動かして遊ぶ
↓
GTK+ソース付属のtutorialを一通りこなす web: http://library.gnome.org/devel/gtk-tutorial/stable/
↓
doc/reference読み方を覚える
↓
小さいアプリをsourceforgeとかfreshmeetで見つけてきて参考にする
↓
irc.freenode.netの#gtk+とかメーリングリストで質問 難しそうですね
断念しました
ありがとうございませんでした 何をどう見たら難しそうなんだよ?
ゆとりか?
英語にびびるな!
サンプルソースなんてコピればコンパイルできる
WindowsでもLinuxでもCode::Blocks使えばそれほど
コンパイルできる開発環境の準備には手間取らない >>197
そうですね
サンプルソースをコピーして勉強したことにしようと思います
>>198
そうですね
パパじゃいやです
>>199
そうですね
数十年ぶりにしゃぶりたいです
>>195
俺、本気になります!真面目に勉強します!
ありがとうございました!! 携帯とか組みこみでGTK+を使っているものって何かある?
海外では結構あるみたいだけど、日本だと聞かないよな。 GTKはもう少しで消滅する
googleの新しいソリューションに置換される Chrome OS の事か?
確かにウィンドウシステムは時前のものを用意するらしいけど、
どうなんだろうね。そもそもソースが公開されるかどうかも怪しい。
それに、GTK+の培ってきた年月を一気に越えられるとも思えないし。
グーグルは基本Qtじゃないの。
でも今更ブラウザの下の層なんか関係ないはず。
HTML5 でアクティブデスクトップっていう懐かしいお話をもう一度やるんでしょ まぁ、googleはWEBアプリが基本だから、そうなるのかね。
ただ、この事前の大袈裟なプロパガンダはMSに似てるなw
GTKスレはあるのにQTスレがないのはなんでだろう〜 初歩的な質問です。
Xを使わずにフレームバッファを使うGTK+アプリをリンクする際は、どのgtkライブラリをリンクすればいいのでしょうか?
Xを使う場合だと以下のようなリンクオプションになると思いますが、フレームバッファを使用する場合のリンクオプションを教えてください。
$ pkg-config gtk+-2.0 --libs
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
Xを使わずにフレームバッファを使うGTK+とやらはインストールしてあんの? debian上からaptitudeでlibgtk2.0とlibgtk2.0-dev関連のライブラリをインストールしてあります。
Xを使わないと動かんよ。
Gtk+はXLibの面倒臭さを軽減するためのライブラリに過ぎんのだから。
Windowsに移植する場合にもXLib相当のが要る >>214
それはX用のパッケージ。
フレームバッファ用のGTKはlibgtk-directfb-2.0-*だぞ。
>>215
知ったか乙 >>216
そうなんですか!
以前ググったら下記サイトのフレーズが目に留まり、てっきりDirectFBじゃなくてもフレームバッファでも利用可能なのだと思ってました。 orz
ttp://armadillo.atmark-techno.com/articles/sd-a500-embedded-course-ch3
>GTK+
>GNOME アプリケーションでユーザインターフェースを構築するのに利用される基礎的なライブラリで,XWindow System 上で動作します(http://www.gtk.org/).フレー>ムバッファやDirectFB 上などでも動作するように設定することができます.
ご教示いただいたライブラリをインストールして確認してみます。
libgrade+gtkmmをいじって遊んでいるのだけど
メインウィンドウからダイアログのようなウィンドウを開く
サンプルは何処かに有りませんでしょうか >>218
gtkmm-demo を起動してみては?
結構いろんなサンプルがあるな > gtk-demo pygtk-demo gtkmm-demo
>>219
libgladeを使っていない様です。 >>220
libgladeは使われなくなる方向だから、、、って思ったけど、
gtkmmだとBuilderを使ったサンプルが無いな。。。
おそらく、以下はチェックされていると思うけど、
http://gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-libglademm.html
複数のwidget idを使っているサンプルは無いですね。。。
Gnome::Glade::Xml::create()して、get_widget()して、
signal処理してrun()する流れは同じだと思うけど、
丁度良いサンプルは見つからないな。。。 >>221
有難うございます。小汚い書き方で何とか表示だけはするようになりました(いろいろ問題が有るけど)
綺麗に書いてあるサンプルなど見ればもう少しましになるかと思ってたのです。
libgladeは使われなくなる方向なんですね。anjutaでデフォルトではく雛型がlibgladeだったので調べてました
今は何を使う方向なんでしょうか? >>222
> libgladeは使われなくなる方向なんですね。anjutaでデフォルトではく雛型がlibgladeだったので調べてました
> 今は何を使う方向なんでしょうか?
Glade 3.6.7のglade-3を起動したら、プロジェクトのオプションってダイアログが開く。
そこには、プロジェクトのファイル形式でGtkBuilderとLibgladeを選択できる。
今後は、GtkBuilderがデフォルトになって、ファイル接尾子が.uiになる。
サンプルはgtk-demoのBuilderのソースを見るとわかると思う。
そして、gtkmmのサンプルが無いな〜って話。
http://live.gnome.org/TwoPointTwentyseven/Platform
のUpcoming Deprecationsで非推奨になっているものは、消えゆく運命。 >>223
Debianのlennyを使っているのでAnjuta 2.4.2、Glade 3.4.5です・・・
GtkBuilderのサンプル探しの旅に出たいと思います。有り難うございます glade も GtkBUilder もほとんど同じだから、リファレンスを見ながらで
書けると思うけど。
GtkBUilderを使ったGtk::Drawingariaのサンプルを作ろうとしたんだけど
途端に分からず・・・
イベントとかどうやってつなげたらいいのだろう
イベント処理で書かないと無理だよね? とりあえずこんな感じか。
(ちなみに C++ は main に限って return は不要。これ豆知識な)
int main(int argc, char** argv)
{
Gtk::Main kit(argc, argv);
AppWindow::Initialize(argc, argv);
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(AppWindow::GLADE_FILE_NAME);
AppWindow* app_window = 0;
builder->get_widget_derived(AppWindow::WINDOW_NAME, app_window);
kit.run(*app_window);
}
class AppWindow : public Gtk::Window
{
public:
static const char* GLADE_FILE_NAME;
static const char* WINDOW_NAME;
static void Initialize(int argc, char** argv);
AppWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder);
virtual ~AppWindow();
protected:
void on_quit_action_activated();
private:
const Glib::RefPtr<Gtk::Builder>& m_builder;
Glib::RefPtr<Gtk::Action> m_act_quit;
};
const char* AppWindow::GLADE_FILE_NAME = "app_window.glade";
const char* AppWindow::WINDOW_NAME = "window1";
void AppWindow::Initialize(int argc, char** argv)
{
// 初期化なんかをここで
// OpenGL の描画を独立して(別ウィンドウで)出来るようにしてみる
Glib::signal_idle().connect(sigc::bind(sigc::ptr_fun(PollEvent), DrawGL));
}
AppWindow::AppWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder)
: Gtk::Window(cobject), m_builder(builder)
{
m_act_quit = Glib::RefPtr<Gtk::Action>::cast_static(m_builder->get_object("action1"));
m_act_quit->signal_activate().connect(mem_fun(*this, &AppWindow::on_quit_action_activated));
move(0, 0);
resize(240, 720);
}
AppWindow::~AppWindow()
{
}
void AppWindow::on_quit_action_activated()
{
Gtk::Main::quit();
}
ただの Gtk::Window で悪いけど Gtk::Drawingaria でも大差ないはず。
app_window.glade は GtkBuilder 形式の xml ね。
大体こんな感じが典型的な処理だと思うよ。
>>226
> イベントとかどうやってつなげたらいいのだろう
> イベント処理で書かないと無理だよね?
drawareaをeventboxの上に乗せないとダメじゃなかったっけ?
# と、テストもせずにカキコ 有難う、私が書いていたのと大分違うみたい
少しずつ見てみるよ ちなみに AppWindow みたいに Gtk::Widget を継承している場合は、単に
class AppWindow : public Gtk::Window
{
public:
virtual void on_show()
{
cout << "表示された" << endl;
}
};
みたく仮想関数をオーバーライドするだけでいいんだけどね。
ただ、これもトップレベルのウィンドウのイベントしか反応できないから、
>>229 のコンストラクタみたく cast_static なんかでボタンとか取得して、
自分のメソッドを connect していくのが C++ っぽい書き方な気がする。
>>227
コンパイルしてみたけどエラーで落ちてしまったよ
m_act_quit = Glib::RefPtr<Gtk::Action>::cast_static(m_builder->get_object("action1"));
これってどんな意味かな? 結局こんな感じに書いてつながったけど、何かモヤモヤするよ
複雑になってくると小汚くなりそうだなー
builder_xml->get_widget( "drawingarea1", daria1 );
daria1->signal_button_press_event().connect( sigc::mem_fun( *this, &MyDialog::on_daria_press ) );
daria1->add_events( Gdk::BUTTON_PRESS_MASK );
daria1->signal_expose_event().connect( sigc::mem_fun( *this, &MyDialog::on_daria_expose_event ) );
daria1->add_events( Gdk::POINTER_MOTION_MASK );
daria1->signal_motion_notify_event().connect( sigc::mem_fun( *this, &MyDialog::on_daria_motion_notify_event ) );
daria1->signal_realize().connect( sigc::mem_fun( *this, &MyDialog::on_daria_realize ) ); class MyDialog
{
Glib::RefPtr<Gtk::Builder> builder_xml;
Gtk::DrawingArea* daria1;
public:
MyDialog();
virtual ~MyDialog(){}
bool on_daria_press(GdkEventButton* event);
bool on_daria_expose_event( GdkEventExpose* event );
bool on_daria_motion_notify_event( GdkEventMotion* event );
void on_daria_realize();
};
>>234
> m_act_quit = Glib::RefPtr<Gtk::Action>::cast_static(m_builder->get_object("action1"));
> これってどんな意味かな?
これは GtkAction を取得するんだけど get_object は Glib::RefPtr<Glib::Object> を返す
からキャストが必要になるけど、ドキュメントには cast_static を使うようにって書いて
あるからこうしてる。
当然 app_window.glade に "action1" という名前の GtkAction がないと駄目だよ。
それで落ちてるんじゃない? >>235
別にそんな小汚くはないと思うけど。大体そんなもんだよ。 >>236
MyDialog は Gtk::DrawingArea を継承してもいいかも。
それと on_* は protected の方がいいよ。
>>234
適当なGtk::WindowのGUIを作って読み込ませたんだけど
それがうまく行ってなかったのかもしれない
色々有難う
GtkBuilderを使わない方も少しいじってみるよ Gtk::SpinButtonを浮動小数点表示にする事は出きますでようか? cairommでバックバッファを使った描画はどうすれば良いのでしょうか?
save(),restore()は少し違うような気がして・・・ GTK+onDirectFBをインストールしようと思ってDirectFBのサイトに行こうとしたら
なぜか繋がらないんだけど誰か教えr・・・教えてください。 ttp://www.directfb.org/
URLも貼っておきます。
繋がらない、マジで誰か教えてください GtkGLextmm を使っている人はいますか?
実装具合とか、こっちのライブラリの方が良いよとかありましたら教えて頂きたいのです。
超初心者なのでMesaとかとの違いも分かりませんがGtk繋がりと言うことで宜しくお願いします。 独自処理のバッテリー残量表示のために
Ruby/Gtk2でGtk::StatusIconを使ってみたんですが、
tooltipは付けられても、どうもlabelを付けることができなさそうです。
通知領域にテキストないしはアイコン+テキストを表示したいのですが、
どんなクラスを使えばいいんでしょうか?
リファレンスを見た限りではちょっと見当が付きませんでした。
Gdk::Pixbufにテキストを動的に描画するのかな。 >>243-245
DirectFBのソースをDLしようとオフィシャルサイトを開こうとしたけど、まだサーバが落ちたままだね・・・
9/14頃から落ちてるっぽいからメンテナンスにしては長過ぎだよね。
もしかしてDirectFB終了フラグON? >>249
今はつながってる。digしたら212.227.87.76だった。 GTK+2.18記念あげ
ウィンドウの管理すらGDKで行なうようになり、ちらつきを減少させたり
ウィンドウの変形やアニメーションを行なえるようになったり、別の
(Clutterのような)描画ライブラリの中に簡単に埋め込めるように
なったりしたようだ。
他にも、各プラットフォーム毎に実装していたウィンドウを管理するコード
を共通にする事ができるようだ。
WindowsやMacOSXでの動作が改善されたらいいなと。 gtkmmで複数のウィンドウを開くプログラムは作れますか?
イメージ的にはGIMPの様なコントロールが有って描画画面が有る感じ
gtk+を使えば出来るのかな? やり方が分かったの報告(するまでもないのかな・・・)
Gtk::Windowを継承したクラスをインシタンス化して
hogehoge.show()
で表示されました。(バカみたいな話でお恥ずかしい)
Failure to compile 64 bit gtk on mac os
http://buffalothedestroyer.blogspot.com/2009/07/blog-post.html
>Attempted to install gtk+-2.17.2 on my mac. Had to install:
http://www.nabble.com/Gtk-issues-td23803508.html
mac 環境だと gtk は使えないんだろうか…? >>255
Leopard だけど、MacPortsからインスコできたよ。
Ruby/GtkとPyGtk用にと。 http://www.amazon.co.jp/入門GTK-菅谷保之/dp/4274067769
webの情報をまとめた程度らしいけど
gtkmmも扱って欲しかったかな Gtk+2 で初の和書じゃないの。出るだけで価値がある Gtk::SpinButtonの値が変更された時に発生するイベントを一時的に停止することは出来ますか?
複数のGtk::SpinButtonが変更されるのが分かっている場合に一時的に停止して
手動でアップデートしたいのです。 >>258
gtk2hsも扱って欲かったwww
買うけどなwwww QtよりGTK+がイイみたいだぬ、GTK+に決めるぬ >>258
そもそも洋書でもgtkmmはないだろ。そんな中で日本語の本なんて奇跡が
起こらない限り無理だろ。
【恐怖の】呆れるほど危険な民主党の正体【民主党】
http://www.yo●utube.c●om/watch?v=●MUv12Ae7ojE
小沢一郎 〜 闇の系譜 :秘書逮捕の真相/北朝鮮との黒い関係 高画質
http://www.yo●utube.com/w●atch?v=gdKVt●_vKCHc
2/3【イリハム・マハムティ】東トルキスタンの歴史と中共の弾圧[H21/7/8]
http://www.you●tube.com/watch?v=6eUN●hjdBLXg
漫画で学ぶチベット問題
http://www.ni●covideo.jp/w●atch/sm275●2213
日米規制改革および競争政策イニシアティブに基づく日本国政府への米国政府要望書
http://japan.u●sembassy.●gov/j/p/tpj-j2●0041020●-50.html#mineika-s
●の部分は外してブラウザのURLに入れること
>>258
「入門GTK+」
今日、買ってきたよ。
最近は、Web上のホームページのプログラミング解説の方が分かり
易いとうことが多くなってきているようだけど、
「入門GTK+」を
サックっと、50ページくらい読んでみたところ
この本は、意外に読みやすいし、わかり易い。
他のプログラミングの習得に挫折した人でも何とかいけそうな感じかな。 QtだとQt CreatorとゆうIDEが使いやすいけど、
GTK+使う時はどんなIDE使うと便利ですか。 >>269
「入門GTK+」では、Anjuta(アニュータ)が紹介され解説されているね。 そうそう、時間があったので
qt4の解説書も立ち読みしてきたんだけど、今日買った「入門GTK+」
の方がわかり易かった。
誰か、「猿でもわかるqt4」って本、書いてくれないかな〜 GTK+は使ったときないけど、QtもQt Creatorもすごく使いやすいぬ(´・ω・`)
GTK+簡単なら使ってみようかしら。 >>268
読みやすいのか、ボーナス出たら買おうかな。
>>272
C++使えるならQtだけでいいんでない?
おれはCしか知らないからGTK… そいつム板のwxスレを荒らしてるキチガイだから放置推奨 Gtk+の場合はGladeってのがある。もちろん簡単。 gladeはもうobsoleteだけどね。今はGtkBuilderを使う glade自体はまだまだ現役だよ。
ただlibgladeはもうobsoloteだけどね。 あと半年たらずでGTK+3が出るこの時期に出さんでもという気もするが。 >>279
HPに公開していたGTK+の第2版までのドキュメントを著書にしたいという願いと、
出版社側での「最近GTK+の本が出ていないので出したい」と言う思わくが一致して
GTK+-2の解説であっても出したんでないの。 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 にでてる >>380
両方買うと、結局一冊は読まないままになったりするタイプなので…。
あと、書籍代はケチるべきじゃないと思いますが、深刻な金欠状態なのです。
入門GTK+の作者サイトでの公開について、情報ありがとうございます。
休暇中に目を通してみようと思います。
>>381
Amazon USのレビューで「ネット上で読める」と書いてあったので、どこにあるのか気になってました。
書店になくて立ち読みできなかったので、Google Booksで読んで判断します。
どうもありがとうございました。 GTK+は公式チュートリアルが結構充実している方だと思うので、
それ読めばとりあえずリファレンスとサンプル眺めつつ使えるようになる。
それでも本が欲しくなるならあるウィジェットの使い方を
詳しく書いていて欲しいだとかマルチスレッドとの兼ね合いが
知りたいだとか(あまりいい例が出てこなくてすまん)
求めるものがはっきりしてくると思うので、
それから本を選んでもいいんじゃないだろうか。 >>383
公式チュートリアルのことを知りませんでした…。
ダウンロードできたので、スマートフォン等にコピーして移動中でも読めそうです!
プリントアウトして持ち歩くのもいいかもしれません。
最終更新日が2002年10月27日と古いんですけど、問題ないですよね?
書籍を買ったほうが最後まで読みつづけようという意欲が持てる気がしますが、
とりあえず公式チュートリアルを読もうと思います。
ちなみに「Foundations of GTK+ Development」はGoogle Booksで見てみたら
とても良さそうでした。
「入門GTK+」のほうは著者ページで見つからなかったです・・。 > 最終更新日が2002年10月27日と古いんですけど、問題ないですよね?
……?
公式チュートリアルは
http://www.gtk.org/documentation.html でズバリ The Official Tutorial といってる
http://library.gnome.org/devel/gtk-tutorial/stable/
だよ。
GTK+のソースコードのtarball中にも入ってる(docs/tutorial/以下)。 >>385
Tutorial Availabilityのページにあるリンク(ftp://ftp.gtk.org/pub/gtk/tutorial)から
ダウンロードしました。 そう言うな。明日になればまたみんな仲良しななしさん 今日からGTK+を始めてみた
今までwindowsのvisual stdioしか使ったことなかったから、パスさえ通ってりゃ
#g++ hello.cpp
だけでコンパイルをやってくれると思っていた
今日一日かかって`pkg-config --cflags --libs gtk+-2.0`を知って
ウィンドウを出せた
疲れた 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::::::{ |
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で設定したもの)がカラムの幅を超えたら自動的に折り返して次の行に表示するようにできませんかね?
現状はカラムの幅を超えた部分は消えてしまいます。自分で改行を入れた場合は次の行に表示されるので折り返しも出来そうな気はするのですが。 ttp://library.gnome.org/devel/gtk/unstable/GtkCellRendererText.html#GtkCellRendererText--wrap-mode TreeView内にGtkCellRendererTextでテキストを表示する場合に、一部の文字だけ色を変えたり太字にしたりすることは可能でしょうか?
あるいはTreeViewにGtkEditableを格納するようなことができればそれでもよいのですが。 >>510
pango markupで対応するんじゃね? >>511
g_object_set (renderer, "markup","ab<b>cd</b>e", NULL);
とかでできました。ありがとう! GtkTextIterのリファレンス読んでて、iterって単語がいっぱい出てくるけど
これって、日本語に訳すとどういう単語が適切なのかな?
iteratorで「反復子、繰り返しの概念」って出てきて、いまいち意味がつかめず
iterって出てくると、まったくもって意味がわからん。
ググっても、熱核融合炉とか出てくるし… >>514
iteratorとiterは、まったく同じと考えりゃいいということ? >>515
正確な話は分からないけど、Gtkで出てくる?Iterの類は"位置を指す物"と理解してる。
GtkTextIterでいうと、GtkTextBuffer中のどこかの位置を指す。
イテレータだと、意味するものが広くてピンとこない感じがする。
かといって、訳す場合に他にいい単語があるかは分からない。
ごめん、文字化けした
"?Iter"は"なんとかIter"ってことね
>>516
ものすごく参考にさせていただく。ありがとう。 C++のイテレータはポインタと同じ動作をするものと考えられている。
ポインタのようなものっていう概念が一番しっくり来る。 >>519
ものすごく返答が遅くなったけど、感謝します。 GTK+のリファレンスを見てると、ところどころに
"… is deprecated and should not be used in newly-written code."
ってのが、出てきます。
「推奨しないし、使うなよ」って意味だけど、どうすればいいの?
公開する予定の無いプログラムだから、無視して使ってるけど。 GtkTreeViewでアクティブなRowをハイライトして色を反転させる
機能を無効にすることはできますでしょうか?
自分の環境ですとアクティブなRowは青い背景に白い文字でハイライト
されてしまいます。
RowのSelected状態は変えることができるのですが、そちらはRowが
Select時に灰色っぽくなるだけで問題ないのです。ハイライトの機能
の方を無効したいです。
button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
と、ボタンにアイコンを付けようとしても、アイコンが出てきません。
上の場合、「キャンセル(_C)」というラベルだけ出ます。
メニューバーにアイコンを付けようとしても、アイコンが出ません。
何か欠けてるんでしょうか? gtk_button_set_image()の説明に"gtk-button-images"の設定によると書いてあるから調べてみて 他に同じく悩む人がいるとは思えませんが、解決したのでご報告。
525さんにヒントいただいて、devhelp読んで、ググったら下のとこが出た。
http://ubuntuforums.org/showthread.php?t=1135510
ここの逆をやって、アイコンが出ました。ありがとう。 >>527
つーか、俺もこれずっと悩んでた。
原因が分かってスッとしたよ。ありがとう! >>527
なんかよくわかんないけど、オレからもありがとう! >>527
なんのことかわからんけど、俺からもありがとう! MinGWでWindowsむけにGTK+アプリをクロスコンパイルしている人はいるのだろうか。
Windows上で環境構築せずにすむから楽そうなんだけれど。
>>532
最近のFedoraはmingw関連のパッケージがたくさん追加されているから
Windows向けのクロスコンパイルは簡単だよ。 TreeViewでCellRendererTextで描画してるカラムについてなんですけど、CellRendererTextにwrap-widthを設定した場合、そのカラムをwrap-width以下にリサイズすることができなくなってしまいます。何か回避方法はありますか?
欲を言えばwarp-widthがカラムの幅に対して自動的に変わるようにしたいです。 >>536
おお、pythonだけどCでも全然いけそうな対処ですね。
ありがとうございます! GtkTreeViewで質問です。
gtk_tree_view_set_grid_linesで水平のグリッドラインを表示した状態でcell-background-gdkを使ってセルの背景色を設定しているのですが、色をつけたセルだけグリッドラインが消えてしまいます。何か解決方法ってありますか? GTKを利用したプログラミングの勉強をしているのですが、不明な点があり質問させていただきます。
GTKにて作成したウインドウを常に最前面に表示しておきたいのですが、
それを実現するにはどのようにすればよいでしょうか?
ビュアーのようなものを作っているのですが、他の作業をしながらも確認したいため
他のウインドウより手前に表示しておくことが出来ればと考えております。 >>539
>GTKにて作成したウインドウを常に最前面に表示しておきたいのですが、
WM(ウィンドーマネージャ)側の設定で、できるんじゃないのかな。 gtk_window_set_keep_aboveというのがあるが、うまくいくかはWMに依存する >>541
ありがとうございます。
うまく動きました。 おっさんにもわかるPYTHONの
”ウィンドウを表示するために--クラスを作成する” で
>> self.wTree.add_from_file(os.path.dirname(os.path.abspath(__file__))+"/"+self.gladefile)
のところで
glib.GError: root 要素が間違っています: 'glade-interface'
となり止まってしまいます。どなたか解決方法がわかる方お願いします しらんが
os.path.join(os.path.dirname(__file__), self.gladefile)
とかな 最初から作り直してわかったんですがgladeのほうの設定がおかしくなってたみたいでした
ご迷惑おかけしました
Gtkのアプリケーションを勉強しているのですがわからないことがあります。
TreeViewを利用して、計算結果が順次追加されていくアプリケーションを制作しているのですが、
計算結果が追加されていくに連れて結果を見るにはスクロールが必用になっております。
自動でスクロールを一番下に持って行くにはどのようにすればいいのでしょうか?
理想としては、スクロールが一番下にされていれば、リストが追加されるたびに常に一番下に
スクロールされ、スクロールが途中になっていれば項目が増えてもスクロールは維持。
というふうにしたいです。
ScrolledWindowのset_vadjustmentを利用すればいいことはわかったのですが、
うまく動かすことができません。
便乗質問
gtk.TreeViewColumnで幅を指定しているときにその幅を超える文字列は折り返したいんだけど、オプションが見当たらない。
オプションってないの? gtk.CellRendererTextのwrap-width >>549
ありがとう
CellRenderTextのほうで折り返しが設定出来たのか。
考えてみると、確かに折り返すのはTextだね。
関連でもうひとつ質問させてください
TreeViewColumnをset_resizable( True)にしているんだけど、カラムがリサイズされたときはどこのシグナルがでる?
自分なりに捜してみたのだけど、みつからない、。 上に同じ質問がありましたね。
検索に出て気づきました。
すみません。ありがとうございました。 ねらのみなさんに質問させていただきます。
正確にはGTK#なんですがGTK+でもいいです。
ウィンドウを常に最背面に表示する方法はありますか?
検索するとこんなのが見つかったのですが、
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <X11/Xatom.h>
#define WIN_LAYER_DESKTOP 0
#define WIN_HINTS_SKIP_WINLIST (1<<1)
#define WIN_HINTS_SKIP_TASKBAR (1<<2)
#define XA_WIN_LAYER "_WIN_LAYER"
#define XA_WIN_HINTS "_WIN_HINTS"
ーーーーーーーーーーーーーーーーー
/* windowを一番下に置く */
data[0] = WIN_LAYER_DESKTOP;
gdk_property_change(GTK_WIDGET(window)->window,
gdk_atom_intern(XA_WIN_LAYER, False),
(GdkAtom) XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) data, 1);
/* taskbarやwinlistにこのwindowを表示させないようにする */
data[0] = WIN_HINTS_SKIP_WINLIST | WIN_HINTS_SKIP_TASKBAR;
gdk_property_change(GTK_WIDGET(window)->window,
gdk_atom_intern(XA_WIN_HINTS, False),
(GdkAtom) XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) data, 1);
XA_CARDINALってなんでしょう?? 上記ソース by http://www.host.or.jp/cgi-win/webboard/wb_cont.exe?programing+g+10016+NAME 連投すいません。
本家のフォーラムで聞いてみようと思います。 初心的な質問でスミマセンが
pythonでglade3でつくったLabelの内容を変更するには
どう直したらよいか教えていただけますか?
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import os.path
import gtk
import gtk.glade
class counterGTK:
def __init__(self):
self.gladefile = 'var0.1.glade'
self.wTree = gtk.Builder()
self.wTree.add_from_file(略)
# count number
self.number1 = 0
dic = {
"on_clicked1" : self.on_clicked1 ,
"on_clicked2" : self.on_clicked2 ,
"on_window1_destroy" : self.on_window1_destroy }
self.wTree.connect_signals(dic)
self.mainWindow = self.wTree.get_object("window1")
self.mainWindow.show_all()
def on_window1_destroy(self, widget):
gtk.main_quit()
def on_clicked1(self, widget, event=None):
self.number1 += 1
# !!!ここが変と表示が出ます。
self.mainWindow.set_text(str(self.number1))
if __name__ == "__main__":
略 ブラウザやエディタの上で、
マウスカーソルの下にあるテキストを取得する単純な
方法ってあるんでしょうか?ダブルクリックすると反転する単語
を取り込みたいのですが。出来ればトリプルクリックで反転する
一行も一緒に取り込みたいです。
すいません、アプリケーションによって
トリプルクリックでの反転の仕様は違うようですが、
マウス位置が所属するパラグラフ、単語、行を同時にとりこみたいのです。
言い忘れましたが想定する言語は英語などアルファベットのものです。 GTK+3.0のリリースが楽しみだなぁ
Windows版とかMac版の出来が気になる >>561
遅れてすみません
self.mainWindow.set_title(str(self.number1))
に直すとウィンドウのタイトル欄の方に表示
おかげで一歩前進できたありがとうございました 家計簿のようなものを作りながらPyGTKの勉強をしております。
TreeViewを使ってリストを作成しているのですが、
ID 値段 名前 メモ
1 100 コーラ 自販機
2 200 カルピス 自販機
のようなリストがあるとして、リスト中を右クリックすると編集メニューを出すようにしたいのですが、
右クリックした際にメニューを出す方法や、右クリックした列の値の取得方法がわからず悩んでおります。
どのようなコードで実現できるでしょうか? >>567
いろいろなワードで調べてみたのですが、見つけることができませんでした。
>>567の検索候補も見てみたのですが、TreeViewで右クリックした時の処理はあるのですが、
右クリックした行の値を取得する方法はありませんでした。 >>568
テストしてないけど、gtk.TreeView.get_selection()で取れない? VBoxにLabelやEntryをいくつか配置すると高さが全て均等になりますが、高さを設定するにはどうすればいいですか? GTK+を使ってシリアルポートで自作ハードウェアと通信することは出来ますか? すいません、教えてください。
ubuntuにて、pixmapにgdk_draw_stringで日本語を表示させたいのですが、文字化け
し、下記のメッセージが出ます。
does not support all the required character sets for the current locale "ja_JP.utf8"
どのようにしたら正常に表示できるようになるでしょうか。
gdk_draw_ナントカはdeprecated
cairo使ってね TreeViewの文字列にURLがあればハイパーリンクにしたいと思っているのですが、TreeViewの文字列を
ハイパーリンクにするにはどのようにすればいいのでしょうか?
>>578
g_spawn_command_line_sync()でgvfs-openコマンド呼べばいいんじゃね?
ダメならエラーが返るだろうし。
URLかどうか判断するなら、GRegex使うのが良いのかな? 以下のように画像を表示するだけのプログラムを作成しました。
この画像を表示したまま、プログラムを終了したいのですが、
そのようなことは可能でしょうか。
(他のプログラムに上書きされるまで、プログラム終了後も画像を表示しつづける。)
/* 画像表示領域の生成 */
drawing_area = gtk_drawing_area_new();
gtk_widget_set_size_request( drawing_area,
gdk_pixbuf_get_width( pixbuf ),
gdk_pixbuf_get_height( pixbuf ) );
gtk_container_add( GTK_CONTAINER( window ), drawing_area );
g_signal_connect( G_OBJECT( window ), "delete_event",
G_CALLBACK( close_window ), pixbuf );
g_signal_connect( G_OBJECT( drawing_area ), "expose_event",
G_CALLBACK( expose_event ), pixbuf );
gtk_widget_show_all( window );
gtk_main();
ウィンドウの×ボタンを押したら隠れるのはすぐできるけど、何がしたいのかよくわからないので教えて >>583
説明が少なくてすいません。
X86 Linux PCを使って業務用のシステムを作っています。
PCを起動して、OSが立ち上がったあと、自動で以下の処理を行います。
1)USBメモリが接続されているチェックします。
2)もしUSBメモリがマウントできたらファイル(数百Mバイト)をHDDにコピーします。
3)ファイルコピー完了後に、メインの処理を行います。
2)のファイルコピーに時間がかかるため、その間に「しばらくお待ちください」という静止画を
フルスクリーンで表示したいんです。1)〜3)の処理はシェルスクリプトで行い、
#!/bin/bash
(省略)
|
静止画を表示
cp aaa.bin /temp // ファイルコピー
静止画を消す
|
メインの処理
という感じでやりたいと考えています。
シェルスクリプトでやるのが最適かどうかわからないのですが・・・。 プログラム起動→メッセージ表示→シェル実行→シェルの終了待ち→戻り値確認→終了処理
ではダメなん? >>584
商売でオプソ使うのは止めたほうがいいよ
嫌味で言ってるんじゃなくて、法務的な問題が多すぎてメリット無いって
ソースコード開示しろって言われたとき、開示できる仕様なの?
客先とトラブルになっちゃうよ?
止めた方がいいと思うけど >>584
内容了解。俺だったらこんな感じに実装するけどこでどうかな?
どうしても一回プロセス自体終了する必要があるのであれば
もう少し手を入れないといけないと思う。
スクリプト内のhelloworld.pyは以下のもの
http://www.pygtk.org/pygtk2tutorial/examples/helloworld.py
#!/bin/bash
${PWD}/helloworld.py &
GTKPID=$!
sleep 10
kill ${GTKPID}
exit
>>588
ありがとうございます。
なるほど、そのようなやり方があるのですね。
非同期のプロセスで画像を表示し、
ファイルコピーが完了したら
プロセスをkillするということで理解しました。
私の思っていることが出来そうです。
たいへん勉強になりました。
>>587
同僚の仕事を楽にするために、手伝っています。
今回の件のソースは公開しても全然問題ないのですが、
今後は気をつけようと思います。
以上、ありがとうございました。 http://sourceforge.jp/magazine/11/02/14/0318203
2年ぶりのメジャーリリース、「GTK+ 3.0」が登場
2年ぶりって…
訳も適当だし、なんか寂しいリリースだな PyGTKを使っているのですが、TreeViewのデータを更新したいのですがどのようにすればわからず苦しんでおります。
行いたいことは、
TreeViewに(ID,TEXT)というカラムありデータが羅列しています。
そのIDを指定してTEXTの内容を変更したいのですが、どのようにすればいいでしょうか?
どうかご教授頂ければと思います。 スレ違いであれば申し訳ないございません。
LinuxでGTK+を使ってアプリを作成しています。
Windowsで言うグローバルホットキーを実装したくて色々調べたのですが該当するページが見つからず途方にくれています。
GTK+にはRegisterHotKey()に当たる関数はないのでしょうか?
また、Linuxでグローバルホットを実装する方法があればご提示お願い致します。 >>596
gtk hotkey でググったら、一発ですが探してないの? >>597
すいません、ググり方が少し違ったようで・・・
「Linux プログラミング ホットキー」などで探していました。
ご指摘頂いたワードで検索した結果なんとか行けそうです。
本当にありがとうございました。
検索って難しいよね。目的の情報に準じた予備知識があって
適切なキーワードを選択できてはじめて探し当てられる。
>目的の情報に準じた予備知識があって
あるある。だいぶ知恵ついてくると簡単に検索できるようになるけど、初めての分野だと一向にヒットしない
よく初心者スレで「検索しても見つかりませんでした」「○○で検索すればすぐみつかるだろksg」
みたいなやりとり見るけど、正直初心者にはムリだよな…と思ったりもする。放置するけど
今度またググル先生がアルゴリズム変えるらしいけど、こういった点では改善がみられるかなあ… 3.0.0になってLnFはなんか変わった?
右側に0ナンバーが多いものはなんか怖いから、まだ試してない。 質問です。pygtkを使っています。
gtk.TextViewの背景色を変更するにはどのようにすればよいでしょうか? 自己解決しました。 modify_base(state, color)で変更できました。 squeeze gtkmm 2.4 gtkglextmm 1.2 pthread でプログラムを作っているんだけどプログラムの終了
時に以下のエラーが出るようになってしまいました。同じようなエラーを経験した方は居ませんでしょ
うか?
glibmm-CRITICAL **: Glib::ObjectBase* Glib::wrap_create_new_wrapper(GObject*): assertion `wrap_func_table != 0' failed
glibmm-WARNING **: Failed to wrap object of type 'GdkScreenX11'. Hint: this error is commonly caused by failing to call a library init() function.
自己解決しました。何でコンパイルが通るんだ・・・
誤
Gtk::Main kit( argv, argc );
Gtk::GL::init( argv, argc );
正
Gtk::Main kit( argc, argv );
Gtk::GL::init( argc, argv );
>>607
試してみたら普通にコンパイルエラーになる。
それと関係無いけど、gtkmmは中々むずいよ…
m_act_quit = Glib::RefPtr<Gtk::Action>::cast_static(m_builder->get_object("action1"));
m_act_quit->signal_activate().connect(mem_fun(*this, &AppWindow::on_quit_action_activated));
void AppWindow::on_quit_action_activated()
{
Gtk::Main::quit();
}
とあるコードの一片だけど、敷居が高いというかなんというか…
そんで今はValaを使ってる。Valaだと↓こんな感じ。
var quit_action = builder.get_object("action_quit") as Gtk.Action;
quit_action.activate.connect(() => { Gtk.main_quit(); });
>>609
コンパイルが通る方は適当に作った変数を食わしてたんだけど何故か逆にしてもコンパイルが通る
今は書き直して本物のargc,argvを入れています。
valaか〜・・・ドキュメント多い? Valaは日本語のまとまったドキュメントは皆無だね。
英語だったら本家サイトのドキュメントで困る事はないよ。
最終的にC言語にトランスレートされるんだけど、そのソースを見るのが中々楽しいw
gtkで音楽を鳴らすことは出来ますか?
どうすればいいでしょうか? 音楽の方はGTKとは関係ないんじゃないかね?
とりあえずALSA APIとか調べてみては? すいません
windowsでgtk+の開発環境を整えたいのですが参考になるサイトありませんか? 板の名前を100回読読んで最後にサーをつけてみやがれ糞ども >>615
プログラム板にスレがあるよ
そっちで聞けば回答がもらえるかもしれない
こっちの質問は撤回して向こうへ行くといい >>617
ありがとうございます
でも、やっぱりwindowsだと面倒くさそうなのでLinuxでやることにしました
そこでまた問題があるのですが
(PDF注意) http://www.iim.cs.tut.ac.jp/~sugaya/books/GUI-ApplicationProgramming/files/GTK-book-chapter2.pdf
ここに載っているサンプルプログラムをコンパイルしたら以下のエラーが出たのですがどうすればいいのでしょうか?
package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+2.0.pc`
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found
image-viewer.c:1:21: fatal error: gtk/gtk.h: そのようなファイルやディレクトリはありません
compilation terminated.
環境はUbuntu11.04です
>>618
ありがとうございます
でも僕Python3をつかってるので・・・ >>619
どうすればいいのでしょうかって、どうすればいいのか自分で貼り付けてるじゃん。
Perhaps you should add the directory containing `gtk+2.0.pc`
to the PKG_CONFIG_PATH environment variable
あと質問のつもりなら、どのソースをどんな方法でコンパイルしたかくらいは書くべき。 >>620
すいません。以後気をつけます
それとパスの通し方がわかりません・・・linuxはあまり触ったことがないので Linuxだと面倒臭くない、という理由だった人間がパスの通し方もわからんとか…
世の中なめてんのか? LinuxでGTK+プログラミングしようって人間が日本語でないとだめって…
世の中なんめてんのか? ごめん俺も英語ダメ
出来るだけ日本語の情報があるとうれしいw >>624
親のすねかじってるお前よりマシだよハゲ ,,,,,,,,,,,,,,,,,,,,
/": : : : : : : : \
/-─-,,,_: : : : : : : : :\
/ '''-,,,: : : : : : : :i
/、 /: : : : : : : : i ________
r-、 ,,,,,,,,,,、 /: : : : : : : : : :i /
L_, , 、 \: : : : : : : : :i / Yahoo!翻訳したら
/●) (●> |: :__,=-、: / < 負けかなと思ってる
l イ '- |:/ tbノノ \
l ,`-=-'\ `l ι';/ \ 英語がだめな24・男性
ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヾ=-' / /
____ヽ::::... / ::::|
/ ̄ ::::::::::::::l `──'''' :::| GTK以前にOSで躓いてるのか。
だったら分かってるだろうwinでやった方がいいんじゃないの?
winはもっと分からないっていうなら仕方ないけど。 プログラミング系の英文を翻訳したらわけが分からなくなる
原文でわけが分からない方がましなくらいにね・・・
それとは別に ID:z2Mrc21j はもっと謙虚になるべき
下地が出来ていないし質問する場所が悪いし何を聞いたらいいか分かっていない気がする
何でパスを通したいのか分からないけど細かい質問はgoogle先生で検索してみるといいかも >>621
パスの通し方はGTKと全く関係ないLinuxの基礎の基礎なので、スレ違いです。 >>619
aptitude install libgtk2.0-dev
gcc `pkg-config --cflags gtk+-2.0 --libs gtk+-2.0` image-viewer.c まあ、パスの通し方でからんでるアホも、
同レベルとみなした方が良さそうではあるがな それにしてもスレ違いの質問は認めちゃだめだろw
グダグダになるぞw libgtk2.0-devをインストールしてなかったわ コンパイルできた >>634
1. パスの通し方でからんでるアホ
2. スレ違いのグダグダにからんでるアホ
3. >>637 このレス
同レベル。 Gentooを使うとみみっちい*-devパッケージなんかで
悩まされずにすむんだけどなあ HTML5バックエンドにはびびった。
これは、GTK+アプリがサーバーで動いていてクライアントでは<canvas>で
表示しているだけって事かな。
HTML5対応ツールキットとか沢山出てきそうだけど、やっぱりGTK+は最初から
完成度高いものが使えるから、かなりのアドバンテージになるはず。
インストールしなくてもWindows上でGTK+アプリが使える訳だから最高だな。 既存のGTK+アプリケーションを応用したクラウドサービスの予感 GTK+2で、Cairoを用いて一回の描画に非常に時間がかかるもの(例えばマンデルブローとか)を描画して、
GTKのDrawingAreaに表示するにはどうしたらいいんでしょうか?
直接DrawingAreaのGdkwindowにExposeイベント毎に描画するようにすると当然破綻します。
GTK+2だとCairoのSurfaceに描画してそれをPixbufにするというのもできない感じなので困ってます。
GdkPixmapに描画して、ウィンドウ再描画のときはそこから転送する。
むしろGTK+3でGdkPixmapがなくなって、オフスクリーンなpixmapを
どうやって持つのか知りたい。
オフスクリーンなGdkWindowというのがあるらしいから
それを作ってpixmapとして使えということなのだろうか。 >>642
ありがとうございます。
使ってる言語のバインディングが+2用なので仕方なく+2を使ってますが、今から使うアプリに
GdkPixmapは使いたくないので、他に手段ないでしょうか?
+2でも、CairoのSurfaceをGdkWindowにコピー?できるのが理想なんですが。
ちなみに、+3では
http://developer.gnome.org/gtk3/stable/ch25s02.html#id1407324
によればCairoのSurface使えってことだと思います。 >>643
http://zetcode.com/tutorials/cairographicstutorial/cairoimages/
の「Blind down effect」でできるようですよ
簡単に要約すると
関数cairo_image_surface_createでオフスクリーンなsurfaceを作って、そこに落書きし、
eexposeイベント内で関数cairo_set_source_surfaceを呼び出して落書き結果をコピーするという方法だそうです >>644
ありがとうございます、それでやってみます。 GtkTableにアタッチしたウィジェットのパディングを変更したいんですが
gtk_table_attach()を変更の度に呼んでも問題ないですか?
それともパティングを手軽に変更できる手段って他にあるでしょうか。 >>647
GtkAlignmentでどうですか?
例えば、GtkButtonのパッディングを変更できるようにしたいなら、
button = gtk_button_new_with_label( "Button 2" );
align = gtk_alignment_new( 0, 0, 0, 0 );
gtk_container_add( GTK_CONTAINER( align ), button );
gtk_table_attach( GTK_TABLE( table ), align , 1, 2, 1, 2, GTK_SHRINK,
GTK_SHRINK, 0, 0 );
でButtonを登録し、
gtk_alignment_set_padding( GTK_ALIGNMENT( align ), 5, 5, 10, 10 );
で調節します。 >>648
ありがとうございます
GtkAlignmentでもパディング変更できましたが
GtkTableのchildrenの中の該当ウィジェットを格納した
GtkTableChildのx/ypaddingを変更することでもできるようです スレッドA,BにおいてAからBを終了させるpthread_close()に相当する処理を行う方法がgtkには無い。 >>650
お役に立てずにすみません。GtkTableChildを使った方がスマートですね。
ところで、Gtk 2.0のリファレンスにGtkTableChildクラスの説明がみつからないのですが
どこにあるか教えていただけませんか?
Gtk 1.0のほうは見つけたのですが、Gtk 2.0の方では見つかりません
公式の3.0のリファレンスにも無いですね
もしかして直接触っちゃだめなのかもと思ったけど
childrenにテーブルの中身がって書いてるしヘッダみろってことなのかも
ところで画面解像度の変更やテーマの変更の感知はどのイベントを
受け取ればいいのか教えてください >>654
>>childrenにテーブルの中身がって書いてるしヘッダみろってことなのかも
なるほど、そういうことなんですね。
ところで、解像度の変更イベント処理はGdkScreenのsize-changedイベントで処理できます
参考URLは
http://www.gtkforums.com/viewtopic.php?p=3643
です。
それとテーマの変更イベントですが、すみませんが僕にはわかりませんでした。
下記のURLによると、テーマ変更時に変化するオブジェクトのイベントを
すべて監視すればいいらしいのですが…
http://www.gtkforums.com/viewtopic.php?f=3&t=3829&p=10165&hilit=theme+change+event#p10165
>>655
ありがとうございます
テーマの方はこんな感じでできそうですね
ちょっと試してみます
https://garage.maemo.org/plugins/ggit/browse.php/?p=modest;a=commitdiff;h=5879161f031517a16b4c516e90700b647cb62b1e
+ g_signal_connect (G_OBJECT (instance), "notify::style", G_CALLBACK (on_notify_style), (gpointer) instance); UbuntuLinuxを使っていると、
ラブハンドルになるスクロールバーとならないスクロールバーがあるんだけど違いはなんなの? >>656
私のほうでも試して見ましたが、
それでテーマ変更イベントの検出はできるようですね。
しかし、notify::styleイベントがgtkリファレンスに見つからないw
何のイベントなんだろう?
>>657
ラブハンドルになるアプリ名とならないアプリ名を書けば、
誰かが調べてくれるかも?
debhelpを日本語化するプロジェクトはもう立ち上がっているのでしょうか? ttp://mugtug.com/sketchpad/
↑これ有名なHTML5のデモだけど、
ttp://blogs.gnome.org/alexl/2011/04/18/broadway-update-3/
GTK+3.2がリリースされれば、↑こんな感じに同じ事が出来るようにのか?
wktkが止まらない!
cairoは死んでしまったのか…
Firefoxに見捨てられ更新もほとんど無い
>>664
gitのログ見たけど更新しまくってね?リリース見ても5月中にも
pycairoとかcairommとかバインディング関係が更新あるしcairo自体は既に成熟期だろ
それとIDが惜しい ttp://lists.cairographics.org/archives/cairo-commit/2011-June/thread.html
↑ここ見て少なく感じた。半分近くはコードでないコミットだし。
GtkDrawingArea を自分で XCreateWindow して作りたい時ってどうすればいいか教えてください。
自己解決した。
Gdk.X11Screen.lookup_visual () とか使えば、自分で XCreateWindow () する必要とかなかった。 GtkEntryCompletion のポップアップの最大高さ?を設定する方法おしえてくだしあ
http://up3.viploader.net/pc/src/vlpc008412.png
デフォだと↑みたいに画面の高さいっぱい一杯までスクロールバーがついたポップアップが表示されてしまいます そんなAPIは無いように見えるから
どうしても欲しければ自力でGtkEntryCompletion相当のコードを書くことになるのかなぁ >>670ありがとうございます。
_GtkEntryCompletionPrivate構造体の定義がわからないので諦めました
g_signal_connectでコールバック関数に渡せるデータって一つしかないですよね
でもどうしても複数のデータを渡したい時ってどうするんですか?
例えば,main関数内でエントリーが3つとボタンがあって,
ボタンを押したら3つのエントリーに入力されている文字列をg_printで出力する場合とか
初歩的な質問かもしれないけど,お願いします
>>672
構造体とか使って渡したいデータを1変数にまとめて、
コールバック関数にはその構造体のポインタ渡すのはどうかな
http://pastebin.com/UXyRbuJf >>673
ありがとうございます
やっぱりそれしか無いですか...
なんで可変じゃなくてわざわざ一個だけなんだろうなあ 自分でラッパー書いて、可変引数版のg_signal_connectを自由につくってもいいのよ〜
一般的に複数引数渡すよりポインタ1個渡す方が効率的、と考えられてるんじゃないかな
普通は渡したいデータの型も文字列だけじゃないだろうし、Cだと型が予測できない可変引数を処理するのは面倒だと思う >>675
調べてみると可変引数って色々問題あるんですね,知りませんでした
ラッパーって言葉も今知りました
勉強になります >>672
・そのEntry3つをGHashTable につっこんどいて それをコールバックの引数にする
・そもそもGtkBuilderオブジェクトでつくったUIなら それをcbの引数にする
GTK_ENTRY (gtk_builder_get_object (builder, "ボタンの変数名")) で取れる
・前もってそれぞれのEntryにgtk_widget_set_name(entry,"しきべつめい")しといて
gtk_container_get_children (GTK_CONTAINER (window)) で取れる GList をcbの引数にする
cb関数側でg_list_nth_data つかって先頭からアクセス、gtk_widget_get_name(entry)でとれる名前を確認しながら扱う
三通り思いつきました、どうでしょうか? 2.0用コードを3.0でコンパイルしたら、gdk_pixuf_render_to_drawable()で問題発生しました。
main(){
gtk_init(NULL,NULL);
GdkPixbuf* pixbuf;
GtkWidget* image;
gdk_pixbuf_render_to_drawable(
pixbuf,
image->window,
image->style->fg_gc[GTK_STATE_NORMAL],
0, 0, 0, 0,
100,
200,
GDK_RGB_DITHER_NONE, 0, 0
);
}
gtk+-3,0でコンパイルすると、image->window, image->style, GDK_RGB_DITHER_NONE、の3箇所がエラーになってしまいます。
だれか解決してください。 3.0の方針として、直接メンバー変数にアクセスしない事になったんで、
それぞれ、set_window, get_window みたいなアクセサ経由に変更すればOK >>678 下記サイト 中段 "GdkDrawable is gone" によると
「GTK+3において GdkDrawable,GdkPixmap,GdkImage は削除された。代わりに cairo_surface_t,GdkPixbuf を使え」
とあります。承知の上での質問でしたらすいません
http://developer.gnome.org/gtk3/3.1/ch25s02.html >>677
GHashTableを使うのが一番楽そうですね
参考になりました,ありがとうございました
>>679,680
どうやらgtk+3は描画の高レベル部分をcairoに置き換えたがってるようなので、
素直にgdkによる描画をcairoで書きなおすことにします。 GTK+2で使用可能な2D plotterにはどんなものがありますか?
GTK+3にも移行できそうなものでオススメがありましたら教えてください あんたの言う「2D plotter」とは何なのかをもうちょっと調べなさいよ
「大判プリンター」で目的に合うならこちらを勧めるよ
どうしてもプロッターならその理由が判らないと始まらないし
GTK関係ない話にもなる ベクトルDrawとかのライブラリの亊じゃね?
gnuplotとかmatplotとかそういうの。
わからい人にはグラフ書くライブラリって言ったほうがいいのかな? 仰る通りライブラリのことです、GUIプログラミングのスレでの発言ですからね
それじゃ調べたものを書きますね
・plplot5.9.6
古い環境を意識してるのか8-bit色制限?cairoが普通に扱えて且つPostScriptも吐けて好印象
ただ関数群が使いにくい印象
・GtkExtra3.0.1(beta) の GtkPlot
こちらはdemoを動かしただけですが若干もっさり描画?
cairoすらwrappingしてるからからか?
他にあればそれも検討してその上で使うものを決定したいのです http://stackoverflow.com/questions/915940/python-plotting-libraries
http://wiki.python.org/moin/NumericAndScientific/Plottinghttp://wiki.python.org/moin/NumericAndScientific/Plotting
最近だとRとか使ってるイメージはあるけど
この辺昔からあるからね。どうしてもラッパーライブラリは多くなっちゃうよね
Q: Does pychart support Windows?
Yes. But you need to install Python and Ghostscript beforehand.
pychartとかどうかな日本の人だよ名前から判断すると >>689
ありがとうございます。出来ればCで使えるGTK+のwidget又はcairo_tに描画できるものでお願いします。。
グラフの枠,軸ラベル,グラフ自身,凡例
これらを書ける関数が用意されてると嬉しいです。cairoでガリガリ書く奴はgnome-system-monitorを参考にして
書きましたが何か違うなと感じました、「もっと楽できるものあるだろう」と
Rって言語は初めて知りました。R-devel入れてみましたが GtkDrawingAreaやcairo_tに書く方法が判らず断念しました
pychartはpython使う時は使ってみようと思います gtk_image関連で、プログラム内でファイルを指定して画像を用意する関数はありますか?
gtk_image_new_form_fileなどのように起動するときに指定するのではなく
プログラム内で指定したいのです >>692
すみません、それの具体的な使い方を教えてもらえないでしょうか?
その後に続く()の中には何を入れればいいのでしょうか?
devhelpを見ましたが、書いてある通りに入れるとコンパイルエラーが出ます
gtkwidget *image;
image = gtk_image_set_from_file (GtkImage *image,
const gchar *filename);
↑の*filename のところにファイル名を入れるのでしょうか?例えばaaa.png等
*imageのところも何か入れるのでしょうか? gtk_image_new_from_fileでなんでだめなの >>693
get_ じゃなくて gtk_ ね。俺の書き間違い
ttp://wingtk.sourceforge.net/ishan/sliders.html
ページ内で gtk_image_set_from_file で検索して >>693
gtk_image_set_from_file()使ってjpegでぱらぱら漫画作った
git clone git://git.pf.sourceforge.jp/gitroot/k/ke/kemeco/parapara_manga.git
いっしゅのモーションJPEGwww >>696
何かの折にヘッダファイルとして使わせてもらいます >>696さんのリストを一部改変してボタンを押されたら次の画像を表示するというふうにしたいのですが
上手くいきません
ボタンのシグナルコネクトをflipという関数に接続したのですが
関数が反応してないようです
どうすればいいか教えてください
改変したリストです↓
http://www1.axfc.net/uploader/Sc/so/280374.c すいません、元のリストをアップしてしまいました
正しくはこちらです(ファイル名をimage2.cに変えました)
http://www1.axfc.net/uploader/Sc/so/280375.c >>700
ちょちょと換えてみたから見てみて
http://www1.axfc.net/uploader/Sc/so/280675.c
devhelpってヘルプビューア入れて GtkButtonの説明読むのおすすめ
「The "clicked" signal」 てとこにclickedシグナルハンドラのシグネチャが書いてあるよ
>>699が元々書いてたハンドラとシグネチャが一致してなかったみたい
それと初回クリック時の画像ファイルインデックスは0番じゃなくて1番にしといた 指示レス番まちがえたけど 訂正しねーよ!(我が家杉山) 謝る必要はこれっぽっちもないけど
「動けばいい」とかいう低い志は捨てようや ボタンを押されたときに、シグナルコネクト先を変更したいのですが
if elseで分岐させてみたのですが上手くいきません。(最初に通過した設定がそのまま残って変更出来ない)
ボタンを押されたら、シグナルコネクト先を変更するにはどうすればいいのでしょうか? >>704
> if elseで分岐させてみたのですが上手くいきません。(最初に通過した設定がそのまま残って変更出来ない)
コード見ていないので確かなことは言えませんが、
g_signal_handler_disconnect()とg_signal_connect()を使えばきっと出来ますよ(やってみたら出来た)
code snippestでも貼ってくれたらアドバイスもできたかと思いますが情報が不足していましたので
「ボタンを押されたら、シグナルコネクト先を変更する」というサンプルを書いてみました。ので参照みて下さい
http://www1.axfc.net/uploader/Sc/so/284339.c
main関数内とハンドラ内で共用する変数についての渡し方は
・g_object_set_data()を利用して渡す方法
・g_signal_connect()の最後の引数にGHashTableを指定して渡す方法
・大域変数として宣言しておく方法(この程度の場合は悪手かな?)
の3通り思いつきましたが1番目の案で記述しました。書き方はいろいろあります >>705
ご親切にありがとうございます
解読してみます GTKとcarioとpangoの関係を教えて下さい http://cairographics.org/
http://cairographics.org/news/cairo-1.11.4/
ぬぉ!死んだと思っていたcairoに新バージョンのニュースが!
FirefoxはLinux版も自前のOpenGLレンダラーに移行しつつあるから、
今更4倍速くなったって言っても悲しいけど、GTK+は間違いなくかなり速くなりそうだ。 http://cairographics.org/news/cairo-1.12.0/
cairo-1.12.0がリリースされた。18ヶ月ぶりのメジャーバージョンアップらしい。
個人的にはGTK+の描画がどれだけ高速化されたかが気になるな。
>>713
>どれだけ高速化されたかが気になる
cairoで何をしようとしてるの? 正直に白状するが、
glageのuser dataの使い方がわからないまま
実務で開発しちゃったりしてます。 あと、ラジオボタンとか、配列可して、コールバック関数を一つに
まとめる方法もわからないまま
一個一個書いてます。
とほほ
EmacsとかVisual Studioみたいなマルチストロークのキーバインドって
GTK+でできますか? GTK+はEmacsではキーイベントの処理に使われていません cairoが高速化ってことはeclipseも早くなるのかね anjutaを使ってみたところ
gtk_signal_connectだと警告なしでコンパイルできるのに
g_signal_connectだと暗黙的関数宣言のエラーになるんですが
どうやったら直せるでしょうか? どんな呼び方したのか書いてくれなきゃわからん
一番いい解決方法は DevhelpっていうGUIヘルプビューワ入れて g_signal_connectの説明読むこっちゃ
ver.も気にせずに例を書くとシグネチャ違うみたいだねそれが一番幸せになれる よく確認してみたところエラーになるのはgtk_signal_connectのほうで
GTK3.0で使われなくなっていて代わりにg_signal_connectを使えと書いてありました
http://developer.gnome.org/gtk/stable/gtk-Signals.html#gtk-signal-connect threadやmutex関係もgtk_の方は廃止になって、g_の方のみになった。3。0あたりから
基本的な関数はglibに集約して、ツールキット的な関数のみgtk 3で担当するように住み分けされた
コンパイルの最中に廃止された関数と表示がでるソースは、いずれソースを書き換えないとビルド不能になる
ちなみに最も基本的なlibcでも現在開発ラインの最新版だとgetsが本当にソースから廃止されてるので、getsが使われてるソースをビルドできなくなってる
フォントサイズって10.5ptとか小数点で設定できる?
フォントサイズの指定方法がわかってて
小数点の指定ができるかって疑問なら
やってみて自分で確認すりゃいいのに。 Gtk.TreeView.Selection.Mode = Gtk.SelectionMode.Multiple;
に変更すると得られるGtk.TreeIterがおかしくなってしまう
のですが、Multipleの時はSelection.GetSelectedは使えない
のでしょうか? Gtk.Label page_label = new Gtk.Label (title);
page_label.KeyReleaseEvent += delegate {
Console.WriteLine("!"); //←呼び出されない理由を説明してほしい!
}; GTKは親切ではないなーと楽をしてきただけに思いますw
>>735
ありがとうございます
しかし、それらしいのが見つかりません GTKのGUIは更新をサボる癖があるようですが
無理やり更新させる方法はないでしょうか? Gtk-CRITICAL **: IA__gtk_main_quit: assertion `main_loops != NULL' failed
メインループ内でGtk.Application.Quit ();を呼ぶなって事だろうけど
終了させる方法はないのでしょうか? gtk_main_quit()のソースコードを読めば解決。 >>739
launcher みたいの作ろうとしてるんだろうか…
いまいちどういうことなのか判らないんだけど
logメッセージを抑制したいなら glib 2.32から
http://www.mail-archive.com/geany-devel@uvena.de/msg06039.html
G_LOG_LEVEL_CRITICAL
log level for critical messages, see g_critical(). This level is also
used for messages produced by g_return_if_fail() and g_return_val_if_fail().
ある程度デフォルトだと出力されなくなるみたい
onにするときは環境変数G_MESSAGES_DEBUG=allで以前と同じ動作になるらしい from gi.repository import Gtk このスレ的にはGTKのものをそのまま叩くっていうのは危険なこと? え?ラッパーライブラリを介さず直接コールするって意味じゃないの? UbuntuでPyGTKを利用してアプリケーションを作っているのですが、一部パーミッションが与えられていないファイルへの書き込みを行いたいと考えております。
Ubuntu Software Centerからアプリケーションをインストールしようとすると、Authenticateというポップアップが出てきてパスワードを入力するとsudoの様にアプリケーションのインストールができますが、これはどのように実現しているのでしょうか?
自分でも書き込めるようにパーミッションを変更していることを前提にしているのですが、変更方法を知らない人や、一々変更した後にアプリケーションを起動するのが煩わしい人向けに、アプリケーションからsudoのようなことができないかと考えております。 >>751
pyは使えないのですが、この話はGTKのスレの質問でしょうかね?
Cだったらstatとchmod使うところじゃないかと。 >>751
もしかして:gksu
$ sudo command
のかわりに
$ gksu command
ってやると
GUIでパスワード聞かれる 口下手な>>753は、gksuを参考にlibgksuを使えと言いたいんだな?
libgksuのpythonバインディングもあるから安心だって言いたいんだよな? 質問させてください。
gtkmm2.4ベースでプログラムをいじっているのですが、画面操作せずにGtk::Dialogを閉じる方法が分かりません
Dialog作成→threadで特定の処理を開始→処理終了→※Dialogを閉じる(画面操作せずに)
と言う流れをプログレス表示などをして処理したいのですがrunした後にresponseをしてもhideしてもDialogが消えません
根本的に分かっていないのでしょうが・・・上記のような処理をするにはどうしたら良いのでしょうか? こう書く方法ないかな?
public class Window :Gtk.Window{
} vala優秀そうだね
でもwindowsでも使いまわしたいのでmonoから外れたくない >>760
valaはwindowsでも普通に使える。 Gtk::Dialogはon_delete_eventを呼ばないのですか?
処理が途中の場合とかにダイアログを閉じるのを中止したいのですが、何処で中止させたらいいのやら ちょっとチャレンジしてみることにしました
FreeBasic導入したら、GTK+とCairoが入っていたので。
ネットとサンプルを参考にしながら、
ちょこちょこと弄ってみます。
お手軽に描写の綺麗なプログラムが書けるってことは素晴らしい。 結局add_buttonで追加したボタンを使うのではなく、アクションエリアに普通のボタンを追加し、
connectしたメソッドで処理チェックを行なった後にresponseでIDを投げる事で一応動きは出来たみたいです。
もっと簡単な方法はないですか? ちょっとスレチになるかもなんですけど、GTK使われたアプリをWindowsで自動操作したいのですが
WM_LBUTTONDOWNなどで座標を直接指定でやってるんですけどMenuBar以外が反応してくれないです
どうすればいいでしょうか? Macで日本語入力が可能になりそう!Windows爆死www Linux憤死wwwwwwwwwwwwwwwww
http://engawa.2ch.net/test/read.cgi/poverty/1368116873/ FreeWnn スレッドより:
http://toro.2ch.net/test/read.cgi/unix/1084551838/l50
457 :名無しさん@お腹いっぱい。:2012/07/05(木) NY:AN:NY.AN
gtk2アプリにkinput2で入力する場合に、kinput2のステータス表示の「[あ]」が
真っ黒になってしまう問題の解決法の俺様メモ。
gtk2のソースの、modules/input/gtkimcontextxim.cの
on_status_window_expose_event()関数が変更されたのが原因。
これを、gtk+-2.21.5(以前)のソースのgtkimcontextxim.cに戻せば桶。
modules/input以下のサブディレクトリだけmakeして、
できたim-xim.soだけ置き換えればよい。
ソースにバグありとみた。 http://www.tarnyko.net/en/
ここでWindows版のBroadway実行環境を配布してたから試してみたけど
遅くて使いものにならん…
asm.jsは良い感じなんで、GTK+アプリをそのままasm.jsにコンパイルして
ブラウザで実行出来るようにしてくれたら最高だがな。 同一アプリ上で、IconViewからFrameとかImageへDrag & Dropって
可能なんでしょうか・・・。
そんな感じのサンプルをご存知でしたら教えてくださいm(_ _)m すみません、>>769は出来るようになりました。
drop側の設定に問題がありました。
ところで、Imageから別のImageへのDrag & Dropは可能なんでしょうか。
Dragしても、IconViewの時のようにカーソルが変化しません・・・。 gtkmmでProgressBarの描画更新はどうやったらええねん
set_fractionしても途中を描画してくれない >>772
それアクティビティモードというのと違う?
ナイトライダーをしたいわけではないんよ・・・ >>771,773
set_fraction() で、その都度増分を変えて、すぐ更新したいってこと?
queue_draw() で、PrograssBar の on_draw イベントを呼んでみたら? >>774
はい、その通りです。お付き合い頂き有り難う御座います。
queue_draw()を試してみましたが、表示のされ方は変わりませんでした。
試したコードを貼り付けようとしたのですが、行数の制限で書けませんでしたので、部分的に書き込みます。
ググって見ているのですが・・・何かお気づきの点がありましたらよろしくお願い致します。
プログレスバーとボタンを配置し、ボタンが押された時に動くようにしました。
drawBtn.signal_clicked().connect( sigc::mem_fun( *this, &ProgressWindow::on_draw_prog ) );
void ProgressWindow::on_draw_prog() {
progBar.set_fraction( 0.0 );
for( int i=0; i<100; i++ ) {
progBar.set_fraction( (double)i/100.0 );
// progBar.queue_draw();
sleep( 1 );
}
progBar.set_fraction( progBar.get_fraction() + 0.01 );
} おそくなってゴメン、こんな感じでどうでしょう?
ttp://www.dotup.org/uploda/www.dotup.org5080741.gz.html
>>772 であげたチュートリアルのコードをいじったものです。
SpinButton の値を 0 から 100 (%)までの任意の値に変更して "Update" ボタンを押すと
ProgressBar の状態が変化します。
examplewindow.cc の on_button_update を見れば分かるかと思います。 >>776
コードまで書いて頂き有り難う御座います。
コンパイルして動作を見ましたら、進捗状況の変化を確認できました。
しかしながらon_button_update内で下記コードのようなループを回しset_fractionするようにしてみましたら
相変わらず最後の表示だけするようです。実際の処理ではループを回して進捗状況をset_fractionします。
む〜もう少しネットをあさってみます。
void ExampleWindow::on_button_update()
{
m_ProgressBar.set_fraction( 0.0 );
for( int i=0; i<100; i++ ) {
m_ProgressBar.set_fraction( (double)i/100.0 );
m_ProgressBar.queue_draw();
sleep( 1 );
}
} なんかそれっぽい動きになったけどこれでいいのかね・・・イベント強制執行みたいな
[変更前]
m_ProgressBar.queue_draw();
sleep( 1 );
[変更後]
usleep( 50000 );
while( Gtk::Main::events_pending() ) Gtk::Main::iteration( true ); タイマーか〜処理がスパゲッティーになりかけているから使いづらいんだよね
アクティビティモードの時は使いやすそう。
今少し弄っているんだけど、set_pulse_stepでステップ量設定しても反映されないな ComboBoxでドロップダウンアイテムを選択した時に発生する
イベントってなに? 本当は先にこっちへ書くべきだった。
gtk_mode
gtk_fashion
gtk_style
gtk_pattern みなさん、人工言語の
高級低級の長所短所のチンチンはご存知? 技術系スレには自分で人口無能を作っちゃう人もいるからな。
>>786が人間とは限らないよ すみませんが質問させてください
gtkmmでボタンを作りボタンを押された時にソケットで通信しようとしたのですが
select関数をした時に「リソースが一時的に利用できません」と出てしまい動きません
コンストラクタでselect関数を使うと動くのですが・・・
gtkmmに通信を阻害する要因とか有るのでしょうか? 学校の課題でシューティングゲーム作ってるんですが、cairoで表示した複数の画像の手前、奥の位置関係を変えることってできますか? 昨日からC+GTKでプログラム作ってるんだけど質問。treeviewでリスト表示してる状態で、キー入力すると、
なんか入力ボックスが開いて入力させるんだけど、これを止めさせる方法がわからない
表示だけさせたいんで、編集できるかも?って感触を持たせたくない
エラー表示させる積りはないけど、無視したい
多分、単純な事なんだろうけど... >>794
既に解決してるかもしれないけど
GtkTreeViewのプロパティにある「検索可能」フラグをOffにすればよいみたい g++ (GCC) 6.3.1 20170109、gtkmm 3.22.0でフォントの描画画像を取得するテストプログラムを
作っているのだけど Gdk::Pixbuf::create( get_window(), 0, 0, get_width(), get_height() );
で取得した画像がon_drawで描く前の状態を取ってきているみたいで一つ前の表示になってしまいます
on_drawで描画した後の画像を取得するにはどうしたら良いでしょうか?
(set_double_bufferedも疑ったのですがこちらは関係ないような気がします)
提示する情報が分からず情報不足かも知れませんが宜しくお願いします コールバック関数内で描画に関わる関数を呼んで、その次にPixbufを取り出す関数を読んでたのですが
どうもコールバック関数が終わるまでイベントが処理されないようでした
強制的にイベントを処理する下記コードを追加して上手く動く様になりました
while( Gtk::Main::events_pending() ) {
Gtk::Main::iteration( true );
usleep( 1000 );
}
出来ればDrawingAreaに描画しなくてもPixbufを取り出せると良いのですが・・・
(Pango::Layoutあたりから直接画像イメージを作れないでしょうか) GTKってどうなの?
GTKかQtkかなんやんでQtにしたんだけど(当時kdevelopってQtの開発環境があったんだよね、今もあるけど)。 今からやるならQtのほうがいいんでね?
これからGTK+4で阿鼻叫喚になるのと対照的に、Qt5へ移行したばっかだし >>798
ウインドウ内でうねうね動かせて視覚効果高いのがのがQt。Qtならゲームも作れる。
そうゆうの全く無理で地味でも、ちょうど良いコンパクトサイズのボタン等が充実しててツール作ったりするのに適してるのがGTK。 GTK+4以降では、「安定なAPI体系はハナから持たない」って認識でいいの?
ffmpegのように絶え間なくAPIが変化し続けることになる?
で、バージョン番号もブラウザのようにうなぎ上りになるのか https://blogs.gnome.org/desrt/2016/06/13/gtk-4-0-is-not-gtk-4/
2年ごとにメジャーバージョン更新
最新のメジャーバージョンは開発中につき不安定
各メジャーバージョンの最終版=安定版としたいらしい なるほど
ffmpegほどキ○ガイな方針ではないのね java の JList みたいなことはできる?
どういうのかというと、参考画像
https://docs.oracle.com/javase/tutorial/figures/uiswing/components/NameChooserMetal.png
リストのアイテムがテーブル上に並んでいて、
上下左右にカーソル移動できる。
GTK だとないかな? IconViewをラベルだけで使うみたいなもんかね
Pythonですまんが
from gi.repository import Gtk
from gi.repository import GObject
bname = ["Arlo", "Cosmo", "Elmo", "Hugo", "Jethro",
"Laszlo", "Milo", "Nemo", "Otto", "Ringo",
"Rocco", "Rollo"]
model = Gtk.ListStore(GObject.TYPE_STRING)
for n in bname:
t = model.append()
model.set(t, 0, n)
view = Gtk.IconView(model)
view.set_text_column(0)
win = Gtk.Window()
win.add(view)
win.show_all()
win.connect("delete-event", Gtk.main_quit)
Gtk.main() >>805
なるほど、IconView でテキストか。
できたできた、
どうもありがとう! gtk勉強しようかと思うんだけどもうオワコン?
でもQtバインディングよりgtkバインディングのほうが多いしなぁ...
gtk4で大幅に進化したりしないかな 両方やってみればいい
考えてるほど時間も労力も掛からないよ window のサイズをいい感じ?にできる関数があるか、
お知恵を拝借。
(1) やったこと
GtkWindow に対して、GtkToolbar しか置いてない。
toolbar に、gtk_toolbar_insert() でボタンを4つ横並びに置く。
window のサイズは未指定。
(2) 動作確認
右の方のボタンが矢印でまとめられて?
メニューみたいに表示される。
(横幅を広げると、横並びに表示される)
(3) 所感
相当前に gtk_toolbar_append_element() (deprecated) 等で
配置したときは、横並びに表示されて、
window のサイズはちょうどいい具合に表示されていた(ように思う)。
ボタンが、矢印でまとめられないで、横並びに表示されるように
window のサイズをいい感じ?にできる関数がある?
(意味わかんなかったらゴメンw)
gtk_widget_set_size_request() でざっくりで指定しないとダメかなあ。 >>809
直接の答えは分からないけど、何の工夫もせずにやったらボタンが4つ並ぶ状態で起動すると思う
public class ToolbarTest : Gtk.Window {
public ToolbarTest () {
destroy.connect (Gtk.main_quit);
var tb = new Gtk.Toolbar ();
foreach (var n in new int[] {1,2,3,4}){
tb.add (new Gtk.ToolButton (null,@"Button$n"));
}
add (tb);
show_all ();
}
public static int main (string[] args) {
Gtk.init (ref args);
new ToolbarTest ();
Gtk.main ();
return 0;
}
} toolbar に付いている「つまみ」
(アプリでよくある「toolbar を固定する」みたい感じなのをオフにすると現れる、持つ部分?)
あれは GTK+ では、どうやって出すのでしょうか? GtkHandleBoxならdeprecatedだぞ VTEのspawnなんとかのAPIはいつになったらファイナライズされるのかね(怒 gtk4が気になってgtkの勉強始めようと思うんだけど初心者は何から始めるのがおすすめでしょうか? python3+gtk3で作るに際し
IDE (統合環境)みたいなのってある?
そう大げさなものでなくてよくて
コード補完(gtkのメソッドの)が
出来ればいいかなぐらいの感じなんだけど
もしくは大抵何が使われているのか あるいはvscodeにpythonプラグイン入れれば出来るかな 補足だけどpycharmでgtkの補完を行うにはちょっとした作業が必要みたい
https://stackoverflow.com/a/33646560
vscodeのほう(というかjediという補完ツール)も何かしら方法はあるっぽい? #include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <cairo.h>
#define BITMAP_WIDTH (600)
#define BITMAP_HEIGHT (600)
GtkWidget *window;
GtkWidget *darea;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *button01;
GThread* thread;
volatile int execflag01;
int count;
int time_count;
static void do_drawing (cairo_t *, GtkWidget * widget);
struct
{
cairo_surface_t *image;
} glob;
static gboolean on_draw_event (GtkWidget * widget, cairo_t * cr, gpointer user_data)
{
cr = gdk_cairo_create (gtk_widget_get_window (widget));
do_drawing (cr, widget);
cairo_destroy (cr);
return FALSE;
} 続き
static void do_drawing (cairo_t * cr, GtkWidget * widget)
{
gfloat screen_width;
gfloat screen_height;
gfloat image_width;
gfloat image_height;
gfloat x_scaling;
gfloat y_scaling;
/* ディスプレイの全画面の大きさを取得 */
screen_width = gdk_screen_get_width (gdk_screen_get_default ());
screen_height = gdk_screen_get_height (gdk_screen_get_default ());
/* イメージの大きさを取得 */
image_width = cairo_image_surface_get_width (glob.image);
image_height = cairo_image_surface_get_height (glob.image);
x_scaling = 1.0;
y_scaling = 1.0;
cairo_scale (cr, x_scaling, y_scaling);
cairo_set_source_surface (cr, glob.image, 0, 0);
cairo_paint (cr);
} 続き
static void load_image ()
{
cairo_t *ic;
glob.image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, BITMAP_WIDTH, BITMAP_HEIGHT);
ic = cairo_create (glob.image);
//長方形の描画
{
//色の指定(外枠:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形(x,y,width,height)を描画
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
//長方形の外枠を作る
cairo_stroke_preserve(ic);
//色を指定(塗りつぶし:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形を塗りつぶす
cairo_fill(ic);
cairo_stroke (ic);
}
cairo_destroy (ic);
} 続き
static gpointer thread_func( gpointer data){
cairo_t *ic;
int i;
ic = cairo_create (glob.image);
{
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);
}
cairo_stroke (ic);
for (i = 0; i < count; i++) {
gdk_threads_enter();
{
cairo_set_source_rgb(ic, (i % 256) / 256.0, 0.0, (i % 256) / 256.0);
cairo_rectangle(ic, 0.0, (double)i, (double)BITMAP_WIDTH, 1.0);
cairo_stroke (ic);
}
gdk_threads_leave();
gtk_widget_queue_draw(darea);
usleep(time_count);
}
cairo_destroy (ic);
execflag01 = 0;
} 続き
static void on_button01_clicked(GtkWidget *button, gpointer user_data){
GError *error;
if (execflag01 == 0) {
execflag01 = 1;
count = BITMAP_HEIGHT;
time_count = 1000;
thread = g_thread_create( thread_func, (gpointer)darea, FALSE, &error);
}
} 最後
int main (int argc, char *argv[])
{
load_image ();
execflag01 = 0;
gtk_init (&argc, &argv);
gdk_threads_init();
gdk_threads_enter();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(window), 5);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
darea = gtk_drawing_area_new ();
gtk_box_pack_start(GTK_BOX(vbox), darea, FALSE, FALSE, 0);
gtk_widget_set_size_request(darea, BITMAP_WIDTH, BITMAP_HEIGHT);
button01 = gtk_button_new_with_label("Button01");
gtk_box_pack_start(GTK_BOX(vbox), button01, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button01), "clicked", G_CALLBACK(on_button01_clicked), NULL);
g_signal_connect (G_OBJECT (darea), "draw", G_CALLBACK (on_draw_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW (window), "Cairo Test");
gtk_window_set_decorated (GTK_WINDOW (window), TRUE);
gtk_widget_set_size_request(window, 600, 630);
gtk_widget_show_all (window);
gtk_main ();
gdk_threads_leave();
cairo_surface_destroy (glob.image);
return 0;
} gtkmm っていう C++ のバインディングがあるんだけど,2011 年で 3.0 が出たきり更新の音沙汰がない。
C++ 向けの GTK+ バインディングでおすすめある? gtkmmはgtk4に向けてc++14対応もしてるっぽいし結構期待してる >>827
>>828
ありがとうございます。GNOME のリポジトリはついぞ覗いていませんでした。これで安心して使えます。
しかしパッケージマネージャで入手できる gtkmm が 2.4 と 3.0 というのはちょっと心許ないですね……。
誰か PR 投げてくれないかなぁ〜 (他力本願) >>831
2.4とか3.0とかはgtkmmの互換性での番号だと思うけどどうして心許ないの? >>831
ためしに手元のUbunut 17.04 でバージョン見たら
Version: 3.22.0-1
ってなっとるでな gtk4が出たらJD書き直そうや
いつまでもgtk2じゃ駄目でしょ
最近のgtkはカラー絵文字にも対応してるようだし >>820はGTK+3でBITMAPを表示する方法がわからなかったので
ネットで調べてとりあえず作ってみたものです
それとgtk_widget_queue_draw()をスレッド側で使う場合
下記のようにしないとダメなようです
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave(); デモとして違うのも作ってみました
>>820-825のプログラムのthread_func()関数を下のものに差し替えてみてください
static gpointer thread_func( gpointer data){
int i, j, col, i1, depth;
double xgap, ygap, xx, yy, a1, b1, x1, y1, tmp1, x2, y2;
double xcorner, ycorner, length;
cairo_t *ic;
int count01;
struct {
double xcorner;
double ycorner;
double length;
} param[8];
param[0].xcorner = -1.785666666666666e+000; param[0].ycorner = -2.508333333333312e-002;
param[0].length = 5.000000000000000e-002;
param[1].xcorner = -1.759984700520832e+000; param[1].ycorner = -1.518603515624978e-002;
param[1].length = 9.765625000000001e-005;
param[2].xcorner = -1.759906697591145e+000; param[2].ycorner = -1.515360514322895e-002;
param[2].length = 6.103515625000000e-006;
param[3].xcorner = -1.759901244004566e+000; param[3].ycorner = -1.515219028790770e-002;
param[3].length = 4.768371582031250e-008;
param[4].xcorner = -1.759901209723814e+000; param[4].ycorner = -1.515217680089193e-002;
param[4].length = 5.820766091346741e-012;
param[5].xcorner = -2.112213541666665e-001; param[5].ycorner = -7.939140624999994e-001;
param[5].length = 1.562500000000000e-003; 続き
param[6].xcorner = -2.238124999999996e-001; param[6].ycorner = -6.581041666666665e-001;
param[6].length = 1.250000000000000e-002;
param[7].xcorner = -2.137343749999995e-001; param[7].ycorner = -6.554270833333333e-001;
param[7].length = 3.906250000000000e-004;
ic = cairo_create (glob.image);
for (count01 = 0; count01 < 8; count01++) {
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);
xcorner = param[count01].xcorner;
ycorner = param[count01].ycorner;
length = param[count01].length;
depth = 1000;
xgap = length / BITMAP_WIDTH;
ygap = length / BITMAP_HEIGHT;
xx = xcorner;
yy = ycorner;
for(j = 0; j < BITMAP_WIDTH; j++) {
ic = cairo_create (glob.image);
for(i = 0; i < BITMAP_HEIGHT; i++) {
a1 = xx; b1 = yy;
i1 = 0; x1 = 0; y1 = 0;
x2 = x1 * x1;
y2 = y1 * y1; 終わり
while ((i1 < depth) && (x2+y2 <=4)) {
tmp1 = x2 - y2 + a1;
y1 = 2 * x1 * y1 + b1; x1 = tmp1;
x2 = x1 * x1; y2 = y1 * y1; i1++;
}
if (i1 == depth) i1 = 0;
else i1++;
col = i1;
gdk_threads_enter();
cairo_set_source_rgb(ic, (col % 256) / 256.0, 0.0, 0.0);
cairo_rectangle(ic, (double)i, (double)j, 1.0, 1.0);
cairo_stroke(ic);
gdk_threads_leave();
xx = xx + xgap;
}
yy = yy + ygap; xx = xcorner;
if (j % 5 == 0) {
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
}
usleep(1000);
}
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
usleep(50000);
}
cairo_destroy (ic);
execflag01 = 0;
} 2chでコード貼ると権利関係の問題が生じるから
普通は貼らない。
これ常識。 GTK+4から>>801-802の方針らしいので今GTK+使うなら3系が無難だと思う 本来なら、ソフトウェア板のGEditスレで聞くはずなんだろうけど、あまりにあっちのスレは心許ないので、こちらで聞かせて。
まず、GEditでAlt+n(nは1とか2とか3とかの番号)のショートカットキーを入力すると
現在開いてるタブの中から該当する番号のエディタタブをアクティブにしてくれるんだけど。。
https://help.gnome.org/users/gedit/stable/gedit-shortcut-keys.html.en
GEditのWordCompletionっていうプラグイン使ってるんだけど、
これはオートコンプリートみたいに単語を入力候補の中から選んで入力支援作業をしてくれるプラグインなんだけど、
数ある候補の内から番号を選択して入力しようと思うとCtrl+Alt+n(nは番号)なんだけど、
GEditの公式ページにはAlt+nで良いって書いてある。
https://help.gnome.org/users/gedit/3.4/gedit-plugins-word-completion.html.en
自分としては使う機会が明らかにWordCompletionの方が多いから、逆の方がスゴイ都合いいんだけど、
現在GEditのショートカットキーを変更するのはスゴイ難しいっぽい(昔はプラグインとかあったみたい)。
ググッて出てくる~/.config/gedit/accel の変更もスゴイ難しい・・・。誰か分かる人がいたら教えて。よろしく。 >>845
スレ違いと分かってて書くし使ってるディストリやバージョンは書かないし…
Fedora25の gedit3.22だとAlt+番号で
候補が出ているときはword選択、出てないときはタブ切り替えになる >>846
すみません。まず、スレ違いの点ですが、
ソフトウェア板にLinuxユーザ(GEditはほとんどがLinuxユーザでしょう)がどれだけいるか甚だ疑問ですし(WindowsユーザでGEdit使ってる人はほとんど詳しくないでしょうし、
Linux使いよりも多分詳しくないと思われます)、そういう理由でこちらに質問させてもらいました。
環境によっても違うんですね・・。それは知りませんでした、すみません。
自分はUbuntu16.04LTS、GEditのバージョンは3.18です。
>>846様のFedora25、GEdit3.22の場合はスゴイ良い動き方をしますね。スゴイ羨ましいです!その様な動作の仕方が理想ですね。。マジで大変うらやましいです。
ご回答ありがとうございました。 UbuntuSoftwareにあったGEditを3.22だったので、インストールしてみたら
日本語対応まだしてなかったみたいです。
プラグイン選択とかファイル選択ダイアログは全部文字化けです・・。 Web ブラウザとかの「名前を付けて保存する」みたいな機能を使用した時に出る,
ファイルの名称と保存先を決定できるポップアップダイアログって,どこが出しているか分かりますか?
GTK+ のテーマを継承していたり「最近開いた項目」があったりするので GVfs あたりかなと予想しているのですが。
そしてあのダイアログを自分の好きなプログラムに置き換えることは可能でしょうか。 Ubuntu特有のHUDやらAltでウィンドウメニューをアクティブにする動作のショートカットキーがどうも影響してるみたいです。ショートカットキーを変更してみましたが、時々反映されるまで時間とタイミングがかかるので、もうちょっと待ってみます。ありがとう。 http://mao.5ch.net/test/read.cgi/linux/1188968326/820-825
のプログラムをPython3のGTK+3で書いてみた
注)半角空白をすべて全角空白にしてあるのでコピペする場合は全角空白を半角空白にしてください
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GLib
from gi.repository import GObject
import cairo
import threading
import time
class Window01(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_title('Cairo Test')
self.set_position(Gtk.WindowPosition.CENTER)
self.set_property("width-request", 600)
self.set_property("height-request", 630)
self.count = 0
self.load_image()
self.vbox = Gtk.Box()
self.vbox.set_orientation(Gtk.Orientation.VERTICAL)
self.add(self.vbox)
self.darea = Gtk.DrawingArea()
self.darea.set_property("width-request", 600)
self.darea.set_property("height-request", 600)
self.vbox.pack_start(self.darea, False, False, 0) self.button01 = Gtk.Button()
self.button01.set_label('Button01')
self.vbox.pack_start(self.button01, False, False, 0)
self.button01.connect('clicked', self.button01_clicked)
self.darea.connect('draw', self.on_draw_event)
self.connect('delete-event', Gtk.main_quit)
def on_draw_event(self, drawingarea, cr):
self.do_drawing(drawingarea, cr)
def do_drawing(self, drawingarea, cr):
screen_width = Gdk.Screen.get_width(Gdk.Screen.get_default())
screen_height = Gdk.Screen.get_height(Gdk.Screen.get_default())
image_width = self.image.get_width()
image_height = self.image.get_height()
x_scaling = 1.0;
y_scaling = 1.0;
cr.scale(x_scaling, y_scaling);
cr.set_source_surface (self.image, 0, 0);
cr.paint ();
def load_image(self):
self.image = cairo.ImageSurface(cairo.FORMAT_ARGB32, 600, 600)
ic = cairo.Context(self.image)
#色の指定(外枠:Red,Green,Blue)
ic.set_source_rgb(0.0, 0.0, 1.0)
#長方形(x,y,width,height)を描画
ic.rectangle(0.0, 0.0, self.image.get_width(), self.image.get_height())
#長方形の外枠を作る
ic.stroke_preserve() #色を指定(塗りつぶし:Red,Green,Blue)
ic.set_source_rgb(0.0, 0.0, 1.0)
#長方形を塗りつぶす
ic.fill()
ic.stroke()
def button01_clicked(self, button01):
self.thread = threading.Thread(target=self.thread_func)
self.thread.start()
def thread_func(self):
ic = cairo.Context(self.image)
for i in range(0, self.image.get_height()):
Gdk.threads_enter()
ic.set_source_rgb((i % 256) / 256.0, 0.0, (i % 256) / 256.0)
ic.rectangle(0.0, i, self.image.get_width(), 1.0)
ic.stroke()
Gdk.threads_leave()
Gdk.threads_enter()
self.darea.queue_draw()
Gdk.threads_leave()
time.sleep(0.001)
GObject.threads_init()
Gdk.threads_init()
Gdk.threads_enter()
window = Window01()
window.show_all()
Gtk.main()
Gdk.threads_leave() >>852
2chにコードを貼ると権利が2ch側に譲渡されるのでpastebinなどを使いましょう。 初歩的な質問ですみません。
glade3.18、C言語(初級の本を読んだ程度の知識です)を使用しています。
起動したgladeの右側のプロパティ画面で、
window1 GtkWindow
□|__scrolledwindow1 GtkScrolledWindow
□□|__viewport1 GtkViewport
□□|____image2 GtkImage
のように配置し、scrolledwindow1の全般タブのminimum content width と minimum content height に整数値を入れる事で、window1はマウスでの画像拡大縮小(ドラッグで)が出来る事は確認出来ました。
次に、
window1 GtkWindow
□|__box1 GtkBox
□□|__scrolledwindow1 GtkScrolledWindow
□□□|__viewport1 GtkViewport
□□□|____image2 GtkImage
□□□|button1 GtkButton
と変更すると、画像部分のスクロールは可能なものの、button1を含めたwindowの拡大縮小(ドラッグ)が上手くいきません。
ファイルダイアログの様に、OKボタンやキャンセルボタンをドラッグする事で、ボタンも一緒に下に動く様にするには、どうしたらいいのか悩んでいます。
box1の設定で見逃している部分があると思い調べているのですが見つかりませんでした。
どうすれば解決するのか教えてください。 858です。ソースは以下のものです。
#include <gtk/gtk.h>
#include <stdlib.h>
static void cb_button_clicked ( GtkWidget *Button1 , gpointer user_data )
{
gtk_main_quit ();
}
int main(int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window1;
// GtkWidget *Button1;
gtk_init(&argc,&argv);
builder = gtk_builder_new();
GError* error = NULL;
if ( !gtk_builder_add_from_file(builder, "test17.ui", &error) ) {
g_warning("Couldn't load builder file: %s", error->message);
g_error_free(error);
exit(1);
}
gtk_builder_add_from_file(builder, "test17.ui", NULL);
gtk_builder_connect_signals(builder, NULL);
window1 = gtk_builder_get_object(builder, "window1");
gtk_widget_show_all(GTK_WIDGET(window1));
gtk_main();
return 0;
} 858です。
window1 GtkBox
|__box1 GtkBox
|____textview1 GtkTextView
|____viewport1 GtkViewport
|______button1 GtkButton
textview1のパッキングタブで、展張をONで試したら上手くいきました。
画像ファイルが失敗した理由は分かりませんでしたが、他のwidgetでは成功しました。 ×…window1 GtkBox
○…window1 GtkWindow Gtkmmってあんなに良いのに、なんで全然流行ってないの・・?VisualC++はおろか、Qtなんかよりよっぽど良いじゃん。
もっとはやってクレヨン!!他のC++GUIライブラリがあるか知らんが、VC#、VC++、Qtより俺は断然遥かに好きだな。
簡易言語は面白くないので、無しで。VB6くらいやっててワクワクするぜ! 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
L23RPOWZ2H >>864
一つ目の方なら頑張れば使えそうな気がするけど2つ目は無理ゲー
ミュートできないじゃん >>793-794 2015年書き込み 0
>>795 2016年書き込み 1
2017年 68
何故か2017年はGTK+大躍進の年だった!!!! あの、すごく素人な質問なんだけど、
GTK+3ってGNOMEが主に採用してるツールキットだよね。
ということは、ウィンドウの装飾がGNOMEデスクトップのそれになるってことかな。
上下に幅が広いウィンドウタイトルは嫌なんだけど、どうなんだろう。あの高さって調整できるんだろうか。 TextViewのテスト用に作ってみました
ソースコードはpastebinに貼り付けてみました
エラトステネスのふるい Python版
https://pastebin.com/7T8BThMJ
エラトステネスのふるい C言語版
https://pastebin.com/egnHWyCJ
>>857にTextViewを追加してみました
マンデルブロート集合 Python版
https://pastebin.com/gnfUsgtJ
マンデルブロート集合 C言語版
https://pastebin.com/EDZcmy53 >>871はGTK+3でPythonはPython3です
PyGObjectを各プラットフォームにインストールするには下のURLを参照してください
http://pygobject.readthedocs.io/en/latest/getting_started.html
C言語版の方はUbuntuやDebianなら下のようにすればGTK+3が入ります
sudo apt-get install libgtk-3-dev
コンパイルは下のようにやります
gcc test01.c -o test01 $(pkg-config --cflags --libs gtk+-3.0)
(ここでtest01.cはC言語のソースファイル名 test01は実行ファイル名なので任意の名前に変更してください) FontForge っていうアプリケーションって GTK テーマには対応してないんですか?
黒系のテーマにしてるんですけど,FontForge には反映されてないっぽいんですが… >>871-873
皆さん、お疲れ様です。
Gtkも面白くて最初けっこうやったけど、なんしろ参考書籍が少なすぎる・・。
特にGtkmmに至っては0・・・。ネットのドキュメントや英語サイトを貪っても情報量は少ない・・・
Gtk面白いから、書籍が出ればもっと人気でるんだろうけどなあ・・・
Qtでさえ、分厚いオライリーの本2冊と小さい本とQtQuickの本がある。
まぁQtQuick以外はQt4対応だけど、Ubuntu入れてれば、apt-get で QtCreator込のQt4環境が
余裕で手に入るからなあ・・・ もちろんQt5環境も簡単に手に入るけど・・・
GtkもPythonバインディングやRustバインディングもあるんだし、だれかなんとかして書籍だしてくれないかな・・ PC初心者時代は書籍をありがたがったけど数年でその時期は去ったな
マニュアル類を読めば大抵のことは書かれてるから基本的に書籍いらんしな まあこう言った理由で新しい人は入って来ず、結果流行らない訳ですw 新しい人はチュートリアルやっておけば取っ掛かりは十分だよね >>874
書籍にまとめるにはある程度の範囲に渡って網羅し、記述に矛盾が無いことが求められる
作成コストが高い
それよりも、ユーザが気になっている部分を1つずつ調べて、分かった所があればブログ等にまとめればよい
無矛盾性が要求される範囲が小さくなるので作成コストを低く出来る
広まってほしいと思うのなら、使っている人間が一人一人動かないとどうしようもない た、多様性は正義だから…(震え声)
でもgtkmmの文書の少なさはちょっと異常な気がする。使われてる規模に比べてね。 Mousepadって[Alt]キーを押しながら開くメニューの上で項目を選択して、
[Ctrl]+[<anykey>]とやるとその項目にそのショートカットが割り当てられるんだな。
これGtk+3の機能なのかな。他のXfce4使ってるんだけど、アプリケーションではならんかった。 僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
JG11H すみません。GtkからMySQLやSQLiteに接続したいと思ってるんですが、
普通にLinuxプログラムでMySQLなどに接続する方法もあるけど、GNOMEDBっていうのもあるらしく
GtkやGtkmmから接続しようとすると、どうもGNOME側はGNOMEDBを使えみたいな感じがするんですが
参考URLも外国語含めて少ないので、困っています。
普通のLinuxプログラムでデータベースに接続するような感じでGtkから使ってみてもいいですよね? Gtk+を勉強してると外国語も含めて情報ページが少ないんですよ。
でね、やってるうちにGtkmmもPyGtkも覚えちゃうんですよw
さすがに、LispやRustのGtkバインドとかまでは手を出さないけど、出してみてもいいっか。 ファイルに関連付けられているアイコンを取得する方法ってないですか?
FileChooserDialogでファイルのところにアイコン表示されているものでいいです。
アイコン取得の機能さえ公開されていれば簡単にできそうな気はするのですが、見つけられませんでした。。。 Gtk.ComboBoxText() の下に Gtk.Entry() が幾つか横に並んでいる GUI を作ろうとしていて苦戦してます。
と言うのは、上のコンボの選択に応じて、エントリーの数など、下の内容を変えたいのです。
アドバイスをもらえると助かります。キーワード、これを調べろ等でもありがたいです。
また、例などご存知ないでしょうか? 私は python3 + GTK+3 ですが、それに限らないです。 ウィジェットAの操作でウィジェットBを変更する事はGTK+で可能でしょうか? 「Clion」ってIDEで、GTK+を扱えるらしいけど
これって画面デザインとかできるの? 2万でできるわけねえなあ... UbuntuでWebViewを使ったPGを作ろうとしていますがうまくいきません。
monodevelopにlibwebkit2-sharp-4.0-cilを参照設定し、htmlの表示はできたのですが、C#とJavaScript間でのデータの受け渡しができません。
サンプルになるようなソース、ウェブサイトを教えてもらえないでしょうか。 インプットメソッドの挙動の質問なんですが、
GTK+でテキストフィールドに選択された文字列がある状態から日本語入力を開始すると、
未確定文字が選択文字列の前に挿入されますが ( |選択文字列| -> |あ}選択文字列| 等)、
他のプラットフォームだと、日本語の入力開始時点で選択文字列は削除されるようです。
(|選択文字列| -> |あ|)
で、前者のGTK+の挙動を後者のようにしたいのですが、それって何かの設定で
いけたりしますかね? それともGTK+のテキストフィールド等のクラス (GtkEntryとか)の
コードをいじったりしないと無理ですかね? Gtkmm使っています…。メインウィンドウからもう一つウィンドウを開きます…
このウィンドウにはテキストビューがあるとします…。巨大テキストを貼り付けて…メモリ使用量を増やします…。
そして…ウィンドウを閉じます…。window->signal_delete_event().connectで設定したメソッドで…delete windowをします…。
仕様では…メモリが解放され…メモリ使用量が減るはずなのですが…減りません…。
調べていたら…もっと深刻な事に気づきました…。G_OBJECT(なんかのWidget->gobj())->ref_countで参照カウントを見れます…
Glib::RefPtrはよく使います…がヘッダーで宣言せずに…ローカルで何回も宣言して受けたりします…
builder->get_widgetで親Widgetから取ったりしますが…ref_countが加算され…スタックを抜けても残ってます…。
Glib::RefPtrはヘッダーで宣言して…1つしか使わないようには変えれます…。
普通のWidgetの場合は…builder->get_widgetで何回も取得したりしますが…これもref_countが加算されます…
参照の値渡しでガンガン渡したりもしますが…普通のWidgetでもref_count増大は問題なんでしょうか?スタックを抜けてもあります…。
ref_countは後で悩むにしても…巨大テキストのTextViewをdeleteしてもメモリ使用量が減りません…。
非常に困惑しています…。誰か…。 895です…。メモリ管理はこれでOKなんだと思う…巨大テキストをdeleteしてもメモリは減らないが…
再度…ウィンドウを立ち上げて…巨大テキストを貼っても…メモリは…増えない…
もちろん…ウィンドウを同時に2個立ち上げてで巨大テキストだと増えます…。
Glib::RefPtrのローカル宣言だけど…問題ない気がする…Windowをdeleteすると…消えてるようだ…。
どうも…今日は…メモリ管理で悩みましたが…このままでOKそうです…。
アプリをバイナリエディタとかでクラックできるのは…こういう仕様だからかもしれません…。
どうしても…メモリを減らしたい場合は…どうすればいいのかねぇ…解りません…。 895です…geditでも減らないようです…これはなんとかならないんですか!?
明日は…アロケートあたりを調べてみます…。 895です…別プロセスでWindow起動な気がしてきました…。
とにかく調べていきます…。 895です…テキストビューを300MBまで上げて閉じると…100MBくらい減りました…。
Linuxのアロケータの問題だと思います…。 どういう調査をしてるか分からんけど、mallocってのはユーザーランドのライブラリで、freeしたからといって直ぐにkernelに返却する訳じゃないぞ
メモリリークを調査したいならValgrindとか専用のツールを使わないと
メモリ周りの調査は簡単には行かないよ >>899
>Linuxのアロケータの問題だと思います
アロケータとはどんなものかをちゃんと理解してるのかと。
汎用アロケータのせいにできる範囲というものがある。
geditとか、そんなバカでかいファイルを開くことを想定してなくて、チマチマメモリを
割り当てるようになってたりするのでは。
ただ確かにLinux以外はどうかはちょっと興味がある。mallocの使い方は同じでもさくさく
mmap/munmapしたりするのもしれない。それはそれで別の問題もありうるが。 煮詰まっています…ダイアログに関してです…。Gladeです。
まず…トップレベルに指定すると…Gnomeにウィンドウが2個開いたマークが付きます。
これが気に入らない…メッセージ用のダイアログですが…こんなものにウィンドウ2個開いたみたいな感じに
なるのは許せない…設定ダイアログでもそうです…メインウィンドウのみ起動していると見せたい…。
ウィンドウの属性の型をポップアップにしました…Gnomeでのインスタンス表示マークは…
メインウィンドウのみになっています…美しい…しかし…今度はリサイズができなくなりました…
これでは設定画面とかでは使えません…困りました。ID設定の横の複合というチェックボックスを付けました…
うまく行きました…が…今度は…template classになってしまい…Gtk::Builderで読み込めなくなりました…。
その他…Resize grip…駄目でした。ウィンドウが2個開いたように見えるケースで…
ページャーのスキップ、タスクバーのスキップなどやりましたが…駄目…2個開いたマークです…。
Gnomeでメインウィンドウのみにマークがついて…1個の状態で…サイズ変更ができるケースは…
なんとかしてありませんか?非常に…困っています…。 902です…。Gtkmmですが…Gtk::Builderでtemplate classを読む方法があるかもしれません…。
明日は…そこら辺を調べてみます…。 902です…。できました!できました!dialog->set_transient_for(*window);でできました! 902です…。dialog->set_attached_to(*window);だと背景は透過のままだね…。
親ウィンドウが暗くならない…。設定画面とかでは…こっちの方が美しいかもしれない…。 902です…駄目だ…dialog->set_attached_to(*window);だと…
Gnomeでウィンドウが2個立ち上がったマークが付きます…美しくない…
スマートな方法は…なんかねぇかなぁ…。
今の所…set_transient_forで親ウィンドウがグレーになる方法が最善…。 Gtkmmです…スレッドに関してです…。Glib::ThreadとGlib::Dispatcherに関してですが…
例えば…ストップウォッチを実装したとします…UIの更新は…Dispatcherを介したほうが安定します…。
UI更新を全てDispatcherにすると…Dispatcherは…引数を渡せないので…std::queueを使う必要が出てきます…。
ぶっちゃけ…Dispatcherに任せずに…スレッド内部でUI更新をするケースって…どうなんでしょうか?
スレッドでUI更新か?ディスパッチャでUI更新か?って所で…悩んでいます…。
ディスパッチャを介さずに…スレッドでUI更新で…安定してくれれば…いいんだけど…
判断に困り果てています…。 >>907
std::queueはスレッドセーフじゃないぞ
つうかstd全部そう GtkのTextViewまたはSourceViewについて…50万行程度のテキストだと…geditでも…DRAWのバグなのか…
画面が真っ黒になるブロックがある…これって端末のスペックの問題?それともGTKのバグ?
とりあえず…俺のノートでは…50万行程度のテキストで…画面が真っ黒になるブロックが発生する…
C++で揚げ足を取るのが目的なので…別にLinuxじゃなくてもいいのだが…バグでなんかやる気なくしてきた… AMD Radeon™ HD 7470M
512MB(GDDR5)
ビデオメモリかなぁ…。 でも…この状態で…ブラウザ使っても支障ないし…GTKのバグ!?
凹んできた…。 radeontopでは…vram 0.66%…バグだ…やる気なくしてきた…。
C++で揚げ足取りたいだけなので…VC++でもいいんだ…。
しばらく…凹むわ…。 909です…。ハードウェアやドライバの問題かもしれないので…明日は…比較的ハイスペックな
WindowsマシンにVirtualBoxを入れてテストしてみます…ならないかもしれない…。
昼夜逆転してるので…今日はもう寝ます…。端末特有の問題であればいいんですけど…。 909です…VirtualBoxでもなります…バグだ…詰んでる…。
C++で揚げ足取る予定だったのに…これでは…ちょっと…。
明日から…どうやって生きて行こうか…。 909です…日暮しになる所で…光が射した…。今…Ubuntu20.04を使用しているんだが…
VitualBoxで…Ubuntu18.04で更新アップデートなし新規インストールで…なんと…18.04だと…
不具合が発生しない!…つまり…Ubuntu20.04のバグだ…。なんとかなるかもしれないので…
開発は続けるかもしれないが…Ubuntuにissue上げとかないと…かなり痛い…。
なんとかなるかもしれないので…C++で豪快に揚げ足取りまくる開発生活は続行できるかも…
とりあえず…日暮しにはならないかも…明日は…Ubuntuにissueを上げておく… GTKのテーマ Mist をベースに自分好みに改造しようとして、いくつかのテーマの gtcrc を
調べていたけど、チェックボックスを印つきにするのか、色だけで表現するのかどうやって
指定しているのかどうしてもわからずに散々悩んだあげく engine の存在に気づいた
調べた gtkrc が pixmap engine を使っていたら画像との関連がすぐにわかったが
プリセット?である mist engine を使っている engine "mist" {} だけでは気がつけなかった
日本語で gtk のテーマの書き方を解説しているサイトは非常に少ないですね
https://wiki.gnome.org/Attic/GnomeArt/Tutorials/GtkThemes
https://wiki.gnome.org/Attic/GnomeArt/Tutorials/GtkEngines [クライシスアクター」「豊島保養所」←画像検索&拡散!
他スレに丸ごとコピペよろしくーーー!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞ!!!!!!! >>893
昔プログラミングしてた頃はaplayを使ってたよ だれか…
sylpheed をgcc-14 向けに直して… >>924
clang で通せ。
llvm-18.1.6 でも普通にビルドできる。 レス数が900を超えています。1000を超えると表示できなくなるよ。