GTK+プログラミング
連投すいません。 本家のフォーラムで聞いてみようと思います。 初心的な質問でスミマセンが 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); read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる