[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/27 01:06 / Filesize : 255 KB / Number-of Response : 921
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

GTK プログラミング!!



1 名前:login:Penguin [2001/07/22(日) 22:31]
俺の様な厨房プログラマーをある程度使えるようにまで育成して、和製糞ソフトを
大量量産するのが目的のスレッドです。
とりあえずGNOMEプログラミング(小学館)を買ってきました。
これから読んでみます。

557 名前:煽りイカ [04/09/15 02:24:11 ID:S7MStXnB]
Gtk+はANSI-C言語、QtはC++言語でライブラリが用意されていると言う
解釈でよろしーでしょうか?
オブジェクト指向で開発する場合には、後者の方が使い易いんでしょーか?

GtkのマニュアルをPC上で読んでいたら目眩がしてきたので、KDEのように
本になって出てないでしょうか?あったら買いたいです。

558 名前:login:Penguin [04/09/15 03:05:40 ID:VtuDal+L]
>>556
web.archive.org/web/20040114094302/ghr.shalab.phys.waseda.ac.jp/ghr/gtk_hacking_report.html
まぁ自前のWidgetというかオブジェクトを作るとかしない限りこういうことは知らなくても問題ないよ。

>>557
英語でよけりゃ
www.nostarch.com/frameset.php?startat=gnome_foundation
が網羅的でよさそうな気がする。amazon.co.jp でも買えるよ。洋書版オライリーを扱ってる本屋にも置いてあるかもしれない。
Gtk+の書籍って日本語英語問わずチュートリアル的な本がほとんどなので、リファレンス的
なものとなるとこれ以外の選択肢はない。

559 名前:556 mailto:sage [04/09/15 17:57:59 ID:XXdKtByK]
>>558
いいサイトをありがとん。

>まぁ自前のWidgetというかオブジェクトを作るとかし
人のプログラム見てて、まさにこれをしてたので調べてます。
気がつくと gobject のソースの中で遭難中。


560 名前:煽りイカ [04/09/15 22:46:48 ID:S7MStXnB]
>558
有り難うございます。

561 名前:login:Penguin [04/09/30 18:40:47 ID:ZNjn4MmY]
質問です。

必ずウィンドウ上の何れかのウィジェットがフォーカスを持っているようにしたいのですが
どうすれば良いか分かりません。

例えば、1つのボタンを貼り付けただけのウィンドウを作ったとします。
これを実行してタブを押すと、そのたびにボタンがフォーカスを得たり失ったりします。
ボタンがフォーカスを持っていないときはいったい誰がフォーカスを持っているのでしょうか?
あるいは誰も持っていない状態というのがある?

どちらにしても、この状態をなくすにはどうすれば良いのですか。
教えてください。

562 名前:login:Penguin mailto:sage [04/09/30 18:48:03 ID:SmK1xNom]
>>557
Qtはいいぞぉ。あそこまで洗練されたライブラリは
そうそうあるもんじゃない。

563 名前:login:Penguin mailto:sage [04/09/30 20:38:08 ID:e5kfAN1B]
>>561
何もしなくてもそんな状態じゃないけど…

564 名前:561 [04/09/30 20:50:54 ID:9AhHdXeZ]
>>563

書き忘れていたんですが、1.2の話です。
2系だと平気なんですね、きっと。

565 名前:login:Penguin mailto:sage [04/09/30 22:16:53 ID:e5kfAN1B]
>>564
ウィンドウウィジットの GTK_CAN_FOCUS フラグを落す。

バージョンによって違うとは…。




566 名前:561 [04/10/01 10:45:06 ID:TSUAcXDI]
>>565

だめですた。 orz
でも、ありがとうございました。
もうちと、自分で試してみます。

567 名前:login:Penguin mailto:sage [04/10/01 20:39:26 ID:HB0CGb7q]
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GTK_WIDGET_UNSET_FLAGS(window, GTK_CAN_FOCUS);


568 名前:login:Penguin mailto:sage [04/10/02 19:02:32 ID:vwpDQWM7]
電光掲示板みたいに文字が流れる
プログラム作りたいんですが
参考になるソースしりません?
バージョンはGtk+2.2 です

569 名前:364 mailto:sage [04/10/02 23:52:42 ID:lvcJFuth]
「電光掲示板みたいに」が、ドットもそれらしく表現ということだと
GdkPixbufあたりをつかって自前で画像を描画することになるかと。
いったん文字をDrawableに描画してgdk_pixbuf_get_from_drawableで
イメージを取得するとか。

570 名前:login:Penguin mailto:sage [04/10/03 00:02:22 ID:px/BonVe]
>>569
ありがとうございます。
さっそく、それらしいソースあさってみますね。
描画ソフト関係をあされば大丈夫かな?

571 名前:login:Penguin [04/10/03 22:52:41 ID:b13aFboP]
質問お願いします。

テキストエントリを使って、文字列を取り込みたくて
const char *str = gtk_entry_get_text(entry);
wcahr_t wstr[100];
mbstowcs(wstr,str,100);
としたのですが、テキストエントリに"aaa"と入力して取り込むと正常に
wstrの中身が"aaa"となるのですが、"あああ"と入力して表示させると
文字化けが発生します。
mbstowcsの返り値を調べると-1になっているので正しく変換できてないと
思われるのですが。
もしかしたら、テキストエントリは2バイト文字は扱えないのですか?
どなたか教えてもらえないでしょうか。

572 名前:login:Penguin mailto:sage [04/10/03 22:59:18 ID:NMHtHT7k]
setlocaleとか実行してるか?

573 名前:571 [04/10/03 23:22:17 ID:b13aFboP]
>>572
はい、setlocale(LC_ALL,"ja_JP.eucJP")とやっております。

574 名前:login:Penguin mailto:sage [04/10/03 23:37:40 ID:NMHtHT7k]
gtk_entry_get_textの返り値はUTF-8ではないかと。
それをEUCモードのmbstowcsで実行するからエラーになると。

setlocaleでUTF-8を設定するか(これは他の関数で面倒なことになりそう)
g_locale_from_utf8でUTF-8からカレントロケールに文字列を変換するか。

575 名前:571 mailto:sage [04/10/04 00:04:10 ID:5lyoB5Xl]
>>574
なるほど、そういうことでしたか。
私の作っているプログラムではeuc形式のファイルからの文字列の
読み込みもやらなければならないので、後者の方でやってみます。
アドバイスありがとうございます。



576 名前:login:Penguin [04/10/04 00:14:40 ID:1mgqe0pP]
>>571
char *str = gtk_entry_get_text(entry);
char *locale_str = g_locale_from_utf8(str);
wchar wstr[100];
wprintf("%s", wstr);
wbstowcs(wstr, str, 100);

strの中身はUTF-8 まんまなので
まずiconvなりglibの文字列変換関数(実質iconvのラッパ)で適当に変換する

577 名前:login:Penguin [04/10/10 18:05:08 ID:zn9N0S8U]
GTK+ 2.4.11 Released

578 名前:login:Penguin [04/10/13 08:07:25 ID:0RBMkwen]
GLib リファレンスマニュアル (2.4.7版)
www.gnome.gr.jp/docs/glib-2.4.x-refs/glib/

GObject リファレンスマニュアル (2.4.7版)
www.gnome.gr.jp/docs/glib-2.4.x-refs/gobject/

579 名前:login:Penguin mailto:sage [04/10/13 08:50:09 ID:fnawd3gt]
gtkはCで書かなきゃいかんのがめんどい

580 名前:login:Penguin mailto:sage [04/10/13 09:10:05 ID:EBUt+ZnU]
>>579
pygtkでも使え

581 名前:login:Penguin mailto:sage [04/10/13 10:32:39 ID:fnawd3gt]
C++がいい

582 名前:login:Penguin mailto:sage [04/10/13 12:16:04 ID:i0k9Byx8]
GTK+ - Language Bindings
www.gtk.org/bindings.html

583 名前:login:Penguin mailto:sage [04/10/21 22:11:24 ID:nRPw1OZd]
ウィンドウのタイトルを右クリックするとメニューが出てくるように、
ウィンドウマネージャで設定されています。
この時、gtkで一部のウィンドウのメニューを違うメニューにしようと思ったのですが、
_GtkWindowにも_GdkWindowにも操作できるような要素が見当たりませんでした。
どなたかメニューを操作する方法をご存知の方いらっしゃいませんでしょうか・・・


584 名前:login:Penguin mailto:sage [04/10/22 22:33:32 ID:eUY5i1x7]
ウィンドウタイトルの所で出るメニューは、作ってるアプリの管轄外だと
思うんだけど。違う?

585 名前:login:Penguin mailto:sage [04/11/07 00:08:40 ID:A8KZGfM+]
ウィンドウタイトルないウィンドウマネージャもあるしね。
もし可能だったとしてもアプリケーションが操作すべき場所じゃないと思う。



586 名前:login:Penguin mailto:sage [04/11/09 02:11:59 ID:R4ut9ZNk]
Tutorialみてbutton押すとlabelの表示が変わるぐらいは出来るようになったのですが、

gtk_label_set_text(GTK_LABEL(label), "test1");
sleep(1);
gtk_label_set_text(GTK_LABEL(label), "test2");

みたいに処理に従ってlabelを書き換えるようなのは、
どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。

587 名前:login:Penguin [04/11/09 06:18:13 ID:t6yHsCJv]
>>586
#!/usr/bin/env python

import pygtk; pygtk.require('2.0')
import gtk, gobject

count = 0
def greet(widget): print 'Hello!'
def deal_timeout(button):
global count
count += 1
button.set_label(str(count))
print button
if count < 10:
return True
else:
return False

button = gtk.Button(str(count))
button.connect('clicked', greet)

#timer = gtk.timeout_add(1000, deal_timeout, button)
timer = gobject.timeout_add(1000, deal_timeout, button)

window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(button)
window.show_all()

gtk.main()


588 名前:login:Penguin [04/11/09 07:49:39 ID:t6yHsCJv]
>>586
>どうすればいいのでしょうか?上のだと、表示されるのはtest2だけで……。
Windowがマップ(show)されるまで、Labelは表示されないよ。
set_textてコールバックのなかでやってる?



589 名前:login:Penguin [04/11/09 07:50:30 ID:t6yHsCJv]
>>586
ごめん、ボタンラベルではなくだだのラベルを書き換えだね。
それから、pygtkで済まん。
#!/usr/bin/env python

import pygtk; pygtk.require('2.0')
import gtk, gobject

count = 0
def deal_timeout(label):
  global count
  count += 1
  label.set_text(str(count))
  if count < 10:
    return True
  else:
    return False

label = gtk.Label(str(count))

window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
window.set_border_width(10)
window.add(label)
window.show_all()

#timer = gtk.timeout_add(1000, deal_timeout, label)
timer = gobject.timeout_add(1000, deal_timeout, label)

gtk.main()


590 名前:login:Penguin mailto:sage [04/11/09 07:53:30 ID:R4ut9ZNk]
>>587
うっと、その例だと、

count += 1
button.set_label(str(count))
print button
count += 1
button.set_label(str(count))
print button

と二度続けてset_labelしたときに順次表示したいという気持ちで。

591 名前:login:Penguin [04/11/09 08:33:34 ID:t6yHsCJv]
質問の意図が分かった。
おそらくmainループに制御が帰らないから中間のset_textは
反映されないのだと思う。
mainスレッドと別スレッドでset_textすればうまくいくのでは。
def callback(label):
# bigin mainとは別スレッド
global count
label.set_text(str(count))
count += 1
time.sleep(1)
label.set_text(str(count))
# end mainとは別スレッド

592 名前:login:Penguin mailto:sage [04/11/09 08:41:42 ID:Zkj7YPcz]
>>590
何をしたいのかもっと具体的に書いた方がいいのでは?

593 名前:login:Penguin [04/11/10 05:52:19 ID:ppRcKd5W]
>>590
これでどう?
別スレッドによる方法は、よした。こちらの方が簡単。
要は、set_textしたあとmain_iterationを必ず呼ぶ。
下のコード参照。


594 名前:login:Penguin [04/11/10 05:52:58 ID:ppRcKd5W]
>>590
#!/usr/bin/env python

import pygtk; pygtk.require('2.0')
import gtk, gobject, time

def callback(button, label):
  button.set_sensitive(False)
  for i in range(100):
    time.sleep(i%5+1)
    label.set_text(str(i))
    while gtk.events_pending():
      gtk.main_iteration()
  button.set_sensitive(True)

label = gtk.Label('-')
button = gtk.Button('Go')

vbox = gtk.VBox(spacing = 5)
vbox.pack_start(label)
vbox.pack_start(button)

window = gtk.Window()
window.connect('destroy', lambda w: gtk.main_quit())
button.connect('clicked', callback, label)
window.set_border_width(10)
window.add(vbox)
window.show_all()

gtk.main()


595 名前:login:Penguin mailto:sage [04/11/17 04:22:22 ID:YsKYfmVj]
gtk2-perlいじってみようと思うんですが、
gtk_hoge は Gtk2::hogeと言うので安直に
Gtk2::set_locale();
してみたら
Usage: Gtk2::set_locale(class)
と出る。とりあえず
Gtk2::set_locale('euc-jp');
してみると実行出来るが文字化けなおりまへん。
すみまへんが、どなたかぷりーず救いの手。



596 名前:login:Penguin mailto:sage [04/11/17 07:45:19 ID:iY7axWLS]
>>595
www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s10.html

597 名前:login:Penguin mailto:sage [04/11/17 09:53:38 ID:YsKYfmVj]
>>596ありがとん。
use utf8;
足してutf-8で書くだけでしたか。
けどこりゃ面倒だな。。。

598 名前:login:Penguin [04/12/03 19:00:50 ID:GiyN6pXi]
GTK+ 2.4.14 Released

599 名前:login:Penguin [04/12/04 18:37:51 ID:6LgKh+yC]
厨房な質問ですが教えてください。
テキストボックスに日本語入力できません。
日本語の文字列をコピペしても文字化けします。
gtk_set_locale(); の他に
setlocale(LC_ALL,"ja_JP.eucJP"); なども試してみましたが効果ありませんでした。
gtk+ 1.2 なら問題なく日本語が通るのですが、gtk+ 2.4では何か特別なことをする必要があるのでしょうか。
テキストエントリーなら普通に日本語入力できます。

GtkWidget *text; //文字化けする
text = gtk_text_new(NULL, NULL);
gtk_text_set_editable(text, TRUE);

GtkWidget *entry; //文字化けしない
entry = gtk_entry_new();
gtk_editable_set_editable(entry, TRUE);

FAQに違いないと思うのですが、どう調べても解決できません。
#メモ帳程度ならすぐできると思ったのですが、そんな甘いものではないのですね。

600 名前:login:Penguin mailto:sage [04/12/04 18:59:58 ID:VErRj59z]
>>599
www.gnome.gr.jp/docs/porting-apps-GNOME-2.0/ar01s10.html


601 名前:599 mailto:sage [04/12/04 21:48:41 ID:6LgKh+yC]
text = gtk_text_new(NULL, NULL);
ではなく、
text = gtk_text_view_new();
でやってみたら、日本語が使用できました。
gtk_text_new はもしかしてobsolete ?

>>600
参考になりました。(難解すぎてあまり理解できませんでしたが)

602 名前:login:Penguin mailto:sage [04/12/04 22:01:56 ID:9FhprA6L]
マニュアル読みながらやってないのか? 1.2 から 2.0 になる時にけっこう
変わってるよ。

Warning

GtkText is deprecated and unsupported. It is known to be buggy. To use it, you must define the symbol GTK_ENABLE_BROKEN prior to including the GTK+ header files. Use GtkTextView instead.

603 名前:login:Penguin [04/12/08 13:42:17 ID:s2a0TgVZ]
質問です。
画像ファイルを表示させたいのですが、pgm形式の出力の方法がわかりません。
xpmしか出力できないのでしょうか?

604 名前:login:Penguin mailto:sage [04/12/08 17:44:12 ID:RUzeNZBB]
>>603
>xpmしか出力できないのでしょうか?
gdkpixbuf でたくさんのフォーマットに対応してるが、 pgm が対応してるか
どうかはしらん。

605 名前:login:Penguin mailto:sage [04/12/09 01:42:01 ID:8bxaruuu]
GTKを使ったアプリケーションを作ってみたいと思っているんですが、
おすすめの入門書などはありますか?
当方、VisualStudio+C言語+Win32APIならたいていの物は作れる程度の知識ですが、
Linuxは初心者です(´・ω・`)ショボーン

>「GTK+・GDKによるLinuxアプリケーション開発」
近所にこんな本があるんですが、どんなもんでしょうか。



606 名前:login:Penguin mailto:sage [04/12/09 02:28:34 ID:9Rw7z+2N]
最新のGTK+に対応してる本がよさげ。

607 名前:login:Penguin mailto:sage [04/12/09 04:27:08 ID:R51KLcmk]
>>606
Gtk2に対応してる日本語本ってあるの?
あるなら折れも欲しい。

>>605
CとWin32APIを好き勝手できるのなら
www.gnome.gr.jp/docs/gtk+-2.0.x-tut/gtk-tut.html
ここを一通り見てみるのもそう苦じゃないと思う。
GTK+以外のところ、つくりたいものの根っこの処理なんかは
システムコールとか解説してる本を一読しておく必要があると思うが、
そういう本はわりと見掛ける。
ガンガレ!

608 名前:603 mailto:sage [04/12/09 12:34:15 ID:wvxh3lvA]
>>604
ありがとうございました。おかげで解決できました。

609 名前:login:Penguin mailto:sage [04/12/09 23:37:09 ID:8bxaruuu]
>>606
>>607
ありがとうございます。参考にします(´・∀・`)

610 名前:login:Penguin [04/12/17 15:43:49 ID:+/93qx7Y]
gtk+ 2.6.0

611 名前:login:Penguin mailto:age [05/01/10 02:06:52 ID:W1Pzi+ZV]
ショートカットとして "Shift+Ctrl+a" というキーを割り当てるには
どうすればよいでしょうか?

gtk_widget_add_accelerator の第5引数に
GDK_SHIFT_MASK|GDK_CONTROL_MASK
というように指定しても、コンパイルで
invalid conversion from `int' to `GdkModifierType'
と怒られてしまいます。

612 名前:login:Penguin [05/01/10 03:15:43 ID:lP2Bwze9]
equis.ya.com/coletassoft/non_pb/linux_pie/imagepages/image8.html

613 名前:login:Penguin mailto:sage [05/01/28 21:39:23 ID:fhQu+EL0]
 Linux上でGtk+2アプリケーションのWindows実行形式(*.exe)を構築する方法を
まとめてみますた。

win2linux.sourceforge.jp/pukiwiki/index?%5B%5BInfo%2F%A5%AF%A5%ED%A5%B9%A5%D3%A5%EB%A5%C9%B4%C4%B6%AD%A4%CE%B9%BD%C3%DB%5D%5D

614 名前:login:Penguin mailto:sage [05/01/31 14:32:47 ID:nk2PSUal]
>>613
おおっ!
build-cross.shを試してみようと思うのですがこれってPREFIX変えれば
rootにならなくても動きます?


615 名前:614 mailto:sage [05/01/31 16:16:04 ID:nk2PSUal]
>>614
>build-cross.shを試してみようと思うのですがこれってPREFIX変えればrootにならなくても動きます?
自己レス.できました.

>>613
いいっすね.スクリプトもページも勉強になりました.
感謝!




616 名前:login:Penguin mailto:sage [05/01/31 21:21:11 ID:rpwtgdcM]
613ですが、libxml2とlibxsltについては、もう少し、入れ方に工夫が必要そうです。自分で
*.pcをでっちあげるというのも手かもしれませんが。ということで要研究です。

617 名前:login:Penguin mailto:sage [05/02/24 14:05:33 ID:opcJ4VYg]
>>11
> こんくらいの英語がわからんよーじゃLinuxは使えんよ。

Linuxのドキュメントは英文のなかでも難解な部類に属すると思われ

618 名前:login:Penguin [05/02/26 01:35:42 ID:ioiQR6vn]
日付の書式設定をgettextizeしようと思って、
日付の書式をstrftimeに渡す前に g_locale_from_utf8 で
utf8な文字列に変換してから渡してるんだけど、
何故か g_locale_from_utf8 が0x0な値しか返してくれません。

こんな感じの処理がしたいんだけど、
1.const で _("%B %Y") と書式を指定
2.po には "%B %Y年" と記述
3.g_locale_from_utf8 で文字コードを変換
4.strftime の format に上記を指定して日付をゲト

もしかし po で変換されて帰ってくる文字コードってutf8固定じゃないのかな??

619 名前:login:Penguin mailto:sage [05/02/26 13:17:05 ID:Rle58e5G]
panedの素婦りったのサイズの取得方法をご存じの方、ご教示ください。

620 名前:login:Penguin mailto:sage [05/02/28 19:03:23 ID:QS7g1csz]
>>618
bind_textdomain_codeset() で UTF-8 を指定していますか?
デフォルトでは locale encoding で返ってきます。

621 名前:618 [05/02/28 22:17:53 ID:IaK5xt0q]
>>620
ソースを見たら、bind_textdomain_codeset(EPN, "UTF-8"); となっていました。

色々試してみた結果、一旦「poに日本語訳の無い書式」を選んでおいて、
その後に「日本語訳の有る書式」に切替えると、一旦は正常に反映されるんだけど、
アプリを終了して再起動しようとすると SEGV を起こしてしまいます。

一旦は正常に動作することから、const で記述した文字列を gettextize している部分で、
メモリの確保が上手くいってないような気がしてきました。

どうやって確認したら良いんだろう…。

622 名前:login:Penguin mailto:sage [05/03/01 03:22:58 ID:4G9qSY/D]
>g_locale_from_utf8 で
>utf8な文字列に変換してから渡してるんだけど、

g_locale*_to*_utf8じゃないと「utf8な文字列に変換」はできねえんでねえかい

623 名前:618 [05/03/01 19:23:49 ID:4zQ3kAWS]
>>622
ごめん。書き間違った。
(誤)g_locale_from_utf8 で
(正)g_locale_to_utf8 で

ちゃんと書くと、最初に g_locale_from_utf8 でカレントロケールに変換してから、
strftime に渡してやって、結果を g_locale_to_utf8 で再度変換してから
label を作ってます。

624 名前:login:Penguin mailto:sage [05/03/03 02:17:43 ID:g8vCaa7b]
gtk でウインドウの x ボタンを押しても閉じないようなウインドウを
作るにはどうしたらいいですか?

625 名前:login:Penguin mailto:sage [05/03/03 18:04:13 ID:Gfb84io7]
>>624
"delete_event" の callback 関数で TRUE を返すようにする。



626 名前:login:Penguin mailto:sage [05/03/03 20:39:00 ID:g8vCaa7b]
>>625
サンクス!

627 名前:618 [05/03/03 21:48:02 ID:Fxm/rLTz]
>>623
自己レスです。

MLで聞いたら、_()マクロの代わりにN_()マクロを使えと教わりました。

結局、const 中の メッセージを const char *msg = { N_("hoege")}; に変更しておいて、
あと sprintf(str,"I am %s",msg); を
sprintf(str,"I am ");
strcat(str,_(msg));
とすればOKだった。

全然GTKに関係無かっただよ。スマソ。

628 名前:login:Penguin [05/03/14 14:58:26 ID:YLJBAcu4]
すいません。 
Gdkのgdk_draw_polygonとかの関数で描画する図形の色を
半透明にして表示する事ってできますか?

当方FedoraCore3のGtk2.0で作成中なのですが
やり方がわからずはまっているところです。
アルファ値の設定ってどっかでできますかね???

宜しくお願いします。

629 名前:login:Penguin [05/03/14 15:32:30 ID:bODZhmWq]
gtk2 でプログラミングしてます。
ボタンやラベルの色を個別二変更できなくて困ってます。
方法をおしえてーーーー!
それとフォントの変更も個別にできないんです。


630 名前:login:Penguin mailto:sage [05/03/14 23:49:50 ID:9KHOi9Md]
>>628
libgnomecanvas使ったほうがいいかもしれない

631 名前:login:Penguin mailto:sage [2005/03/21(月) 12:28:53 ID:HsH5YBrh]



632 名前:login:Penguin mailto:sage [2005/03/21(月) 12:30:23 ID:uGHm3JkC]



633 名前:再描画 mailto:sage [2005/03/24(木) 21:33:44 ID:K5TJHYPW]
こんばんは、質問いいですか。
gtkとpthreadを使ってプログラムを作ってます。
メインスレッドはgtk_main()に行ってて、
作成されたスレッドの方でWidgetに変更を加えます。
(GTK_LABELの文字を変えたりとか)

ところが、変更した時には直ぐに結果が表れません。
マウスポインタがボタンの上に行ったり、他のソフトを起動したりすると
変更されるのですが、放置しておくとそのままーでいてます。

強制的に再描画してみようと思ってWidgetいじった後に
system("xrefresh");
してみたら思った通りに動いてくれました。

でも普通は何か別のそれ用の関数を使うんですよね。
何を使えばいいんでしょうか。


634 名前:login:Penguin mailto:sage [2005/03/24(木) 21:55:49 ID:w4FsQjjW]
gdk_flush() してみるとか

635 名前:login:Penguin mailto:sage [2005/03/24(木) 21:58:19 ID:/mf/WXIK]
>>633
それはスレッドにする必要があるからそうしてるのか?
gtk_main()に突入したら戻ってこないという理由だけで
スレッド化しているなら、スレッド化せずに
gtk_add_timeout使ってコールバックルーチンのほうで描画するとか。



636 名前:再描画 mailto:sage [2005/03/24(木) 22:05:36 ID:K5TJHYPW]
>>634
例のxrefreshしている行を
gdk_flush();
で置き換えてみました。
んー、うまくいきません。ごめん。

今、xrefreshのソースを見てみようとxfree86のソースを落としてます。
ナローバンドなので作業は明日になりそう(T-T)


637 名前:再描画 mailto:sage [2005/03/24(木) 22:10:39 ID:K5TJHYPW]
>>635
ちょっとtimeout使ってみて何か上手く行かなかったから
thread使ってみたんですが、
考えてみればスレッドにする程のもんでもないかも。
もう少しtimeoutで粘ってみる。
繰り返す必要が無いならidle_addの方でもいいのかな。


638 名前:login:Penguin mailto:sage [2005/03/24(木) 22:32:33 ID:ir5d0pxX]
>>633
developer.gnome.org/doc/API/2.0/gdk/gdk-Threads.html

これじゃダメ?
gtk-thread.cを試したらラベルの書き換えできてるようだけど。

639 名前:再描画 mailto:sage [2005/03/25(金) 00:26:27 ID:i+2vihm2]
timeoutで書き直した。成功!!
と思ったら、ボタン(処理を中止するボタンつけてるの)が押せなくなってるっ!
ボタン押しを処理するべきものがお忙し中になっちゃうのかな。

折角情報いただいたのでthreadの方ももう少し粘ってみる。
なんかスレッドっていろいろあるのね。
gdk_flushを手がかりにあちこち読んでみた。
g_thread_init(NULL); を入れたら上手く行った。あれ? flushなくても大丈夫だ。

・・・なんか私、凄く馬鹿だったかも。

>>638
読んでみます。ありがとう。


640 名前:再描画 mailto:sage [2005/03/25(金) 00:56:18 ID:i+2vihm2]
少し訂正。

[誤] g_thread_init(NULL); を入れたら上手く行った。
[正] g_thread_init(NULL); をgtk_main(); の前に入れたら上手く行った。


641 名前:再描画 mailto:sage [2005/03/27(日) 20:09:54 ID:+oexgFcZ]
>>638 のページ、参考になりました。
GUIと関係ない部分での同期処理と複数のスレッドから再描画する時の
同期処理(Widgetをとりあわない様にする事)は別だったんだなぁ。

とりあえず完成しました。ありがとう!!


642 名前:再描画 [2005/05/01(日) 10:24:56 ID:RRZjWKpR]
Linuxでのプログラミング学習です。
こんな問題をいきなり授業で出題されました。
まだほとんど何もやってないので、さっぱり
意味が分かりません。分かる方がいらっしゃるなら、
回答の方教えてはいただけませんか?



f(x)=xの2乗-xy-yの2乗 について
x=-0.423 y=1 の時の値を(小数点第4位までの表示)
で求めなさい。ただし、変数x,yの値はscanf文で
入力させてください。

643 名前:login:Penguin mailto:sage [2005/05/01(日) 10:31:25 ID:ua7T6e16]
>>642
板違い

644 名前:再描画 [2005/05/01(日) 10:34:34 ID:RRZjWKpR]
どこに行けばいいですか?
先ほども別の板で言われてしまいました。

645 名前:login:Penguin mailto:sage [2005/05/01(日) 10:54:47 ID:fDqSGSeJ]
本屋さん



646 名前:login:Penguin mailto:sage [2005/05/01(日) 11:25:35 ID:ZutXiTEl]
>>642
scanfてーからにはC言語だと思うが、プログラミングを習得する気も学習能力もないみたいなので
プログラム板の宿題丸投げスレをお薦めする。
ttp://pc8.2ch.net/test/read.cgi/tech/1113811213/

647 名前:再描画 [2005/05/01(日) 11:57:32 ID:RRZjWKpR]
ありがとうございます

648 名前:glade勉強中 [2005/05/02(月) 06:24:53 ID:3JWzQ4cI]
gladeを使用時して、コールバック関数にユーザデータとして
widgetを渡す方法を教えてください。よろしくお願いします。

現状生成されるコード: interface.c
g_signal_connect ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
NULL);

生成したいコード: interface.c
g_signal_connect ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
GTK_OBJECT (entry1));

やりたいことは、ボタンが押されたときにentry1の内容を操作することです。
mainから操作するという方法もあるのですが・・・

649 名前:login:Penguin mailto:sage [2005/05/02(月) 18:23:05 ID:PZ6xqLwA]
button1 のプロパティウィンドウ出して、シグナルのところに書くだけでは?

glade はウィジットの表示見本程度にしか使ってないから、違うかも…

650 名前:login:Penguin mailto:sage [2005/05/04(水) 22:53:32 ID:6VJhx7bu]
同じく勉強中ですが、
ソースのg_signal_connect()の最後のNULLを手動で書き換えるしかなさそうです。

プロパティ窓の"シグナル"の中には、g_signal_connect()のdata引数に当たる部分を
指定する欄は(バージョン2.10.0の時点で)ありませんし、
entry1を"オブジェクト"のところに書くと
g_signal_connect_swapped ((gpointer) button1, "clicked",
G_CALLBACK (on_button1_clicked),
GTK_OBJECT (entry1));
が生成されてしまいます。

651 名前:再描画 mailto:sage [2005/05/07(土) 00:09:31 ID:fZ/PdFpz]
>>642
何でその名で書き込みますか。
何の罠ですか。
私は>>633の「再描画」です。
同一人物に思われるじゃなかですか。勘弁してくださいよ、もう。


652 名前:login:Penguin mailto:sage [2005/05/07(土) 09:25:01 ID:wZZgaFg6]
カブるのいやならトリップつけとけ。

653 名前:login:Penguin mailto:sage [2005/05/07(土) 12:29:43 ID:FaaicVGA]
コテハンでもないのに、いちいちトリップ付けられるのうざい。


654 名前:login:Penguin mailto:sage [2005/05/07(土) 23:39:55 ID:lWepT/vx]
えー、gladeの話に戻すとするか。

私も g_signal_connect()の最後は手動で書き換え。
>>648 の例だと NULLを単純に entry1にするかな。

interface.cは最初にgladeが生成したのから随分変更するので
ある程度コード書きが進行してからまたgladeに頼りたい時は、
別の所にコードを出力しておいて両interface.cをdiffして
ちまちま書き換えてる。


655 名前:login:Penguin mailto:sage [2005/05/08(日) 00:01:51 ID:cuTcQAVH]
とりあえずのものであれば、
シグナルハンドラ(on_button1_clicked())内で
lookup_widget()を使ってentry1を取得するのもありかと。



656 名前:login:Penguin mailto:sage [2005/05/08(日) 11:08:08 ID:yrqPYh5d]
もしlibgladeを使うのなら、gladeが生成するXMLファイルから
glade_xml_get_widget()でentry1を取得すればOK。
(もしくは一度glade_xml_get_widget()で取得したentry1を
glade_xml_signal_connect_data()のuser_dataとして渡す)

gladeファイルを何度も変更すると、Cソースをその都度出力してdiffを・・・と
手間がかかってしまうので、楽ができます。

657 名前:glade勉強中 [2005/05/08(日) 23:25:53 ID:YB00BN6K]
648のwidgetを渡す件ですが、
gladeが、生成する support.h 内の関数 lookup_widgetを用いて、
コールバック関数を内でwidgetを検索して取得することができました。
GtkWidget *entry = lookup_widget(GTK_WIDGET(button), "entry1");
gtk_entry_set_text (GTK_ENTRY(entry), dirname);






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef