トップページtech
981コメント348KB

【GUI】wxWidgets(旧wxWindows) その3【サイザー】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/09/09(土) 00:06:30
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)について語りましょう。

本家
 http://www.wxwidgets.org/
wxWindows日本語プロジェクト
 http://wxwindowsjp.sourceforge.jp/
Let's wxWidgets
http://dot-gray.s33.xrea.com/
(*)準備中(*)
http://www.geocities.co.jp/SiliconValley-Cupertino/8526/
wxWindowsで始めるC++ GUIプログラミング
http://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
http://namazu.org/~satoru/pub/uu-2004-08/
dW : Linux : wxWindowsの概要
 http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-wxwin.html
SunWorld Online:wxWindows――無名だが成熟したGUIツールキット
 http://www.idg.co.jp/sw/back/200102/20010219_01_report.html
0571デフォルトの名無しさん2008/01/22(火) 17:11:00
558です。
ご指摘されたとおりrxvt上からg++ 〜でやってみたのですが
wx/wx.h No such file or directory
などその他たくさんエラーが出てしまいました。

wx-config --cxx` -o hello.exe hello.cpp `wx-config --cflags --libs`
では wx-config-cxx commnad not found と言われてしまいました。

>567さん
Linuxでやる方が簡単なんですか。。
一度VMwareにUbuntu入れてやろうと思ったのですが重くてやめてしまってました。
Linuxの方が簡単なのであればそっちでやってみることにします。
ありがとうございました。
0572デフォルトの名無しさん2008/01/22(火) 17:22:09
簡単にGUIアプリが作りたいだけなら、wxPython でやってみるって手もある。
0573デフォルトの名無しさん2008/01/22(火) 18:38:29
>>568に便乗質問なのですが、
xrcでフォームの位置やサイズをアプリケーション終了時に保存することはできますか?
0574デフォルトの名無しさん2008/01/22(火) 23:05:56
>>570
出来ました。ありがとうございます
0575デフォルトの名無しさん2008/01/23(水) 00:04:51
>>571
もうちっとコマンドラインとか、パスとか、そういうことを勉強したほうがいいと思うな ...
0576デフォルトの名無しさん2008/01/23(水) 01:05:42
>>572
そういえばマイナー同士の組み合わせの割には、wxPythonの日本語情報って
ググると意外に出てくるね。
0577デフォルトの名無しさん2008/01/23(水) 02:08:03
最近のが多いから
はじめたばかりの君は恵まれている
昔は見つからなかった
0578デフォルトの名無しさん2008/01/23(水) 02:15:24
なるほど。ということは、ちょっと前に「情報が少なかったのに頑張った」
猛者たちがあらわれたってことか。感謝感謝。
0579デフォルトの名無しさん2008/01/23(水) 05:26:51
っつーかwxHogehogeの中で一番楽なのがwxPythonな気がする
0580デフォルトの名無しさん2008/01/23(水) 08:53:58
今pythonがアツいってのもあるね
wxに限らずPyGTKやらPyQtやらで作られたアプリが増殖中
0581デフォルトの名無しさん2008/01/23(水) 09:11:20
wxPythonについて概ねまとまってて勉強になったサイト
自信たっぷりの間違いがいくつかあるので注意
ttp://www.harukaze.net/~haruka/wxpython/
0582デフォルトの名無しさん2008/01/29(火) 18:06:45
アプリケーションのトップのエラーハンドラって書けますか?

C++ Builder/VCL だと、
>void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender, Exception *E)
みたいな感じで書くんですが。
0583デフォルトの名無しさん2008/01/29(火) 19:13:42
C++標準の例外じゃダメなの?
0584デフォルトの名無しさん2008/01/29(火) 19:22:52
いや、それで良いのです。throw するのはC++の例外。
アプリの一箇所、一括でcatchしたいだけですが、どう書けば良いでしょう?
0585デフォルトの名無しさん2008/01/29(火) 23:17:40
int main()
{
try {
// main routine
}
catch(...) {
// error handling
}
}
0586デフォルトの名無しさん2008/01/29(火) 23:40:34
wxApp使った場合って、mainが隠蔽されてるんだっけ?
とするとwxApp::OnFatalExceptionとかがそうなのかなぁ。
ttp://wxwindowsjp.sourceforge.jp/docs/html/wx/wx30.htm#wxapponfatalexception
0587デフォルトの名無しさん2008/01/30(水) 01:38:35
Ver2.8.6使ってるけど、
wxApp::OnUnhandledExceptionのドキュメント見ると、
OnRunをオーバーライドしてそこでキャッチしろって書いてるよ。

int MyApp::OnRun()
{
 try{
  return wxApp::OnRun();
 }
 catch(std::exception &e){
  ...
 }
}
05885822008/01/30(水) 08:41:31
>>585 >>586 >>587 etc.
回答サンクス。

やっぱ質問してヨカタ。
05895822008/01/30(水) 10:36:01
ヘルプの内容(>>587)確認しました。

OnRunオーバーライドして、エラーはcatchはされるんですが、catchの前にエラーが出てしまうのは何ででしょう。
05905822008/01/30(水) 10:39:12
OnExceptionInMainLoop()をオーバーライドして、return trueしたところ、無問題になりました。
有難うございました。
05915822008/01/30(水) 10:44:40
あれ?例外が補足されなくなちゃったorz
05925872008/01/30(水) 11:20:47
bool MyApp::OnOnExceptionInMainLoop() { throw; }
でMyApp::OnRun()のcatchに直通できた。
wxのエラーダイアログの中止ボタン押したときの処理もこうだから、
たぶんこれで問題ないと思う。
05935822008/01/30(水) 11:28:06
>>592
あ、本当ですね。上手くいきました。
05945822008/01/30(水) 11:51:30
Winでは上手くいったのですが、
wxMac-2.8.7では、MyApp::OnOnExceptionInMainLoop()がコールされずに、
>シグナル 6(SIGABRT)により終了しました。
で終わってしまうのは何ででしょう?

throw を丸々囲んだら、ちゃんとcatchされますので、C++例外オフの問題じゃないみたいです。
念の為configureを調べても、
>checking for --enable-no_rtti... no
>checking for --enable-no_exceptions... no
です。
0595デフォルトの名無しさん2008/01/30(水) 12:07:13
サンプルみつけました:

wxWidgets/samples/except
http://cvs.wxwidgets.org/viewcvs.cgi/wxWidgets/samples/except/
http://cvs.wxwidgets.org/viewcvs.cgi/wxWidgets/samples/except/except.cpp?rev=1.13&content-type=text/vnd.viewcvs-markup
05965822008/01/30(水) 13:25:38
あれー、
>wxMac-2.8.7\samples\except
で、
コンソールからmakeしましたが、
アプリでThrowメニュー(int/string/object)を実行すると、アプリがエラーで吹っ飛びます。

どうも、wxMacのバグですね。
当面は、実行メニューをそれぞれtry-catchで囲んでおきます。
開発中にcatch内容が変わったりすると、メンドイですね。
0597デフォルトの名無しさん2008/01/30(水) 15:29:47
http://www.wxwidgets.org/docs/technote/patches.htm
0598デフォルトの名無しさん2008/01/31(木) 16:16:31
すいません質問させて頂きたいのですが、
http://0xcc.net/pub/uu-2004-08/
このページ見てwxGladeでc++のコードを生成しようと思って、プレビューまでは普通に出来たのですが、Generate Codeボタンを押すと

An exception occurred while generating the code for the application.
This is the error message associated with it:
'ascii' codec can't encode characters in position 28-33: ordinal not in range(128)

こんなエラーが出てコードが生成できません。どうすればいいでしょうか?

環境は
Ubuntu7.1.0
libwxbase 2.8.4.0
libwxgtk 2.8.4.0
python-wxglade 0.5
python-wxgtk 2.8.4.0
python-wxtools 2.8.4.0
python-wxversion2.8.4.0
です。

どなたかアドバイス頂けると幸いです。。
0599デフォルトの名無しさん2008/01/31(木) 17:14:43
対症療法だが日本語使うのをやめろ
0600デフォルトの名無しさん2008/01/31(木) 22:16:10
てかエラーメッセージ読めよ…
0601デフォルトの名無しさん2008/01/31(木) 23:01:50
レスありがとうございます。

エラーメッセージ読んでますが読んで意味が分からなかったので質問させて頂きました。
エラーメッセージで検索したりもしてみたんですが関係ありそうなのが出てこなかったので・・

日本語ですか。特に使ってないと思うのですが・・
0602デフォルトの名無しさん2008/01/31(木) 23:02:14
レスありがとうございます。

エラーメッセージ読んでますが読んで意味が分からなかったので質問させて頂きました。
エラーメッセージで検索したりもしてみたんですが関係ありそうなのが出てこなかったので・・

日本語ですか。特に使ってないと思うのですが・・
0603デフォルトの名無しさん2008/01/31(木) 23:17:53
英語が読めないならば、エラーメッセージを英日翻訳ソフトに入れると良いかもよ。
ascii文字以外が入っているかもう一度確認して見てください。
ascii文字の意味はわかりますか?
0604デフォルトの名無しさん2008/01/31(木) 23:44:01
親切にありがとうございます。
いえ、英語は分かるのでエラーメッセージの翻訳はできるんですが、それでも意味が分からないということなんです。
ASCII文字は分かります。
「ascii文字以外が入っているか」っていうのは、どこを確認すればいいのでしょう??
0605デフォルトの名無しさん2008/01/31(木) 23:56:32
インターフェースに日本語つかってるということなんじゃないの?
アルファベットだけつかったつもりでも、
まちがって全角スペースが入るということもあります
0606デフォルトの名無しさん2008/02/01(金) 00:03:41
>>602
直接的な答えじゃなくて申し訳ないけど、俺がやるなら:

・エラーメッセージを出力している部分の wxGlade のソースコードを読む
・エラーが出なくなるまでウィジェットを減らしてみる
0607デフォルトの名無しさん2008/02/01(金) 00:11:46
ソースファイルを1バイトずつ読み込んで値が全部0以上127以下になってるか調べればいいと思うよ
0608デフォルトの名無しさん2008/02/01(金) 01:42:06
解決しました。
単純にコードを吐き出すパスに「デスクトップ」が入っていただけでした・・汗
回答くださった方々ありがとうございましたm(_ _)m
0609デフォルトの名無しさん2008/02/01(金) 03:11:59
これはずっこけざるを得ない. まぁありがちだとは思うが.
ubuntu-jpも余計なことしてくれるよな. 'デスクトップ'は英語名に直しとき.
0610デフォルトの名無しさん2008/02/01(金) 04:05:20
デスクトップで作業してんじゃねーよ、カス
0611デフォルトの名無しさん2008/02/01(金) 09:53:13
まあ、トラブルの原因のほとんどは「単純」なミスだよね
0612デフォルトの名無しさん2008/02/02(土) 17:49:53
fedora8のwxwidgets(2.8.4)で
wxDirPickerCtrlで起動後初回の選択のみ反応しないのですが,
(GetPathに反映されず,ハンドラも呼ばれない)
同じような症状の方いませんでしょうか?
使い方でミスをしてるのか,バグなのか分からなくて困ってます.
0613デフォルトの名無しさん2008/02/03(日) 02:36:57
今ようやくHello,worldが作れたんだけれど、66KBだった。
4MBぐらいになるってどこかに書いてあったのだけれど。
0614デフォルトの名無しさん2008/02/03(日) 03:13:40
静的リンクだとMBになるよ
0615デフォルトの名無しさん2008/02/03(日) 03:22:02
てことは、静的リンクになってなかったってことですよね。
特別なにもしてないと静的リンクにならないんでしょうか。

ところで、Linuxだと

g++ -c hello.cpp `wx-config --cppflags`
g++ -o hello hello.o `wx-config --libs`

で普通にコンパイルできたんですが、
Windows Home でやろうとすると

g++ -c hello.cpp `wx-config --cppflags`

wx-config -cppflags: No such file or directory
と言われる、けど、hello.oは生成される。

そして
g++ -o hello hello.o `wx-config --libs`
でも同じように
wx-config --libs: No such file or directory
と言われるけど、今度は何も生成してくれない。

のはなんででしょう。。
0616デフォルトの名無しさん2008/02/03(日) 03:26:45
>>615
>特別なにもしてないと静的リンクにならないんでしょうか。

つ ldd
0617デフォルトの名無しさん2008/02/03(日) 03:52:29
>>615
>>558-563
0618デフォルトの名無しさん2008/02/03(日) 04:42:37
スレ違い
C初心者スレ池
0619デフォルトの名無しさん2008/02/03(日) 04:58:13
>>615
>今度は何も生成してくれない。
>のはなんででしょう。。

太陽が眩しかったから
0620デフォルトの名無しさん2008/02/03(日) 09:23:53
Linux が素人にも使いやすくなって、Windows のコマンドラインと
Unix のシェルの違いもわからないひとが GUI プログラムを
コンパイルできるようになったというのは良いことなのやら悪いことなのやら ...
0621デフォルトの名無しさん2008/02/03(日) 10:04:57
ただの馬鹿なのが問題なんだ。
たとえ素人でも疑問を追及する意思があれば間抜けな質問を垂れ流したりはしない。
0622デフォルトの名無しさん2008/02/03(日) 17:02:57
>>612について情報をお持ちの方は居ませんでしょうか…
0623デフォルトの名無しさん2008/02/09(土) 00:36:25
みんなemacs(Meadow)上でwxWidget使ったコード書くとき、modeどうしてる・・・?
通常のc++-mode設定だとインデント壊れて気持ち悪いよね?
(sample/minimal/minimal.cppに対してindent-regionすると120行目のMyApp::OnInit()が1インデント下がる)

ttp://www.wxwidgets.org/develop/standard.htm#indentation とかの設定もみたけど、
wxWidgetのマクロによるインデントずれの問題は解決してないように見えるんだが・・・
0624デフォルトの名無しさん2008/02/10(日) 02:46:40
すいません、お聞きしたいのですが、
ボタンが押されたらアプリを終了するようにしようと思い、

class MyFrame: public wxFrame {

protected:
wxButton* button_1;
}; // wxGlade: end class

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON(button_1, MyFrame::OnExit)
END_EVENT_TABLE()

void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}

みたいに書いてみたのですが、(はしょりまくってます)
コンパイルしようとすると
hello2.h:31: error: invalid use of non-static data member ‘MyFrame::button_1’
hello2.cpp:13: error: from this location
のようなエラーが出ます。

どこがおかしいでしょうか??
初心者質問ですいません。
0625デフォルトの名無しさん2008/02/10(日) 08:14:57
普段Windows使ってるのでよく分かんないんですが、EVT_BUTTONの後に
指定するのは変数名ではなくて、多分wxButtonをnewする際に指定する
コマンドID(wxID_EXITとか)かも…。
EVT_BUTTON(wxID_OK, MyFrame::OnExit)

MyFrame::MyFrame(...)
  button_1 = new wxButton(this, wxID_EXIT, wxT(“OK”),
wxPoint(200, 200));
  :
06266252008/02/10(日) 08:16:38
orz…
EVT_BUTTON(wxID_OK, MyFrame::OnExit)

EVT_BUTTON(wxID_EXIT, MyFrame::OnExit)
0627デフォルトの名無しさん2008/02/10(日) 13:07:31
>>623
おれはDECLARE_EVENT_TABLE()とかの後ろにセミコロンを置いてる。
0628デフォルトの名無しさん2008/02/12(火) 09:52:51
wxWigetsのiniファイル読み書き専用関数とかあるんでしょうか?
0629デフォルトの名無しさん2008/02/12(火) 13:20:18
>>628
http://wxwindowsjp.sourceforge.jp/html/2.8.4/wx_wxfileconfig.html
06306282008/02/12(火) 13:24:31
サンクス。やっぱこういうのが標準であると便利ですよね。
0631デフォルトの名無しさん2008/02/12(火) 18:16:41
wxWigetsのStringListはありますか?
0632デフォルトの名無しさん2008/02/12(火) 19:43:35
>>631
つ wxArrayString
06336312008/02/13(水) 09:46:38
有難うございます。

wxArrayString.Text (Itemを改行コードを挟みながら連結)みたいなメソッドは無いんですね。
自作するしか無いか。


関係ないけど、やっぱ改行コードってC++のendlを使いますよね?
まさか、wxWidgetsで、CRとかLFをラップしてくれてたりしないですよね?

出来れば、wxWidgetsが改行コードのグローバル変数を持ってて、
初期処理でどのプラットフォームでもCRLFで初期化してやろうかと思ったのですが。
06346312008/02/13(水) 09:50:17
>関係ないけど、やっぱ改行コードってC++のendlを使いますよね?

wxWidgetsのヘルプ読んでると、
>std:string互換関数の利用が強く推奨される!
>そして遅かれ早かれstd::stringを使い始めるであろうwxWidgetsの将来のバージョンとの互換性を保つ.
とあるから、
wxStringより、std::string推奨なんですね。

文字列についてはC++の標準を使えって意味は分かるけど、std::stringって機能が弱いおね。
0635デフォルトの名無しさん2008/02/13(水) 10:57:42
>>634
>std::stringって機能が弱いおね。
たとえばどんな?
0636デフォルトの名無しさん2008/02/13(水) 11:00:08
std::stringだと、

string str1;
str1 = "a" + (string)"b";
みたいに書けないことない?(自分の勉強不足かも)

それとか、UpperCaseが無いわけじゃないけど、書きにくかったりとか。
0637デフォルトの名無しさん2008/02/13(水) 11:11:28
string std::operator+(const char *lh, const string &rh);
は標準で入ってたと思う。
0638デフォルトの名無しさん2008/02/13(水) 11:18:50
あ、+ 演算子は実装されてますか。

gccでエラーだったんですが。(勘違いかも)
0639デフォルトの名無しさん2008/02/13(水) 11:47:01
MinGW gcc3.4.5では大丈夫だね。
0640デフォルトの名無しさん2008/02/13(水) 16:26:50
STLって、MemoryStreamみたいな可変バイト列ってありましたっけ?

vector char とかするのかなぁ?

(ちょっとスレチ)
0641デフォルトの名無しさん2008/02/13(水) 16:41:34
stringstream
0642デフォルトの名無しさん2008/02/13(水) 16:48:22
>>641

どうも。それ使います。insertメソッドとかもありますね。
NULLで切れないと信じて。
0643デフォルトの名無しさん2008/02/13(水) 18:30:57
>string str1;
>str1 = "a" + "b";
は書けます。

>str1 += "a" + "b";
は書けないんですね。

ちょっと不便。
0644デフォルトの名無しさん2008/02/13(水) 19:04:47
全然
0645デフォルトの名無しさん2008/02/13(水) 20:10:56
べつに
0646デフォルトの名無しさん2008/02/13(水) 20:38:05
str += "a";
str += "b";
は出来るだろ。
ていうかC++スレでやるべきだと思うんだ・・・。
0647デフォルトの名無しさん2008/02/13(水) 21:58:27
ま、C++だしな。
そのへん楽したかったら、
wxPython
wxErlang
wxHaskell
wxLua
wxPerl
wxRuby
wxSqueak
wx4j
wxJavaScript
あたり使ったらいんじゃね?
0648デフォルトの名無しさん2008/02/13(水) 22:16:15
C/C++は
"a" "b"
って書いたら
"ab"
って書いたのと同じだけどな。
リテラルだけだが。
0649デフォルトの名無しさん2008/02/14(木) 10:58:06
> wx4j

へえー、4j ってプログラミング言語があったのか・・と思った
ググって見ると、・・このスレのテンプレにすでに書いてあった・・
0650デフォルトの名無しさん2008/02/15(金) 17:55:06
1、プロセスを跨いだ書き込みができるコンソールクラスはありますか?
 (wxで無くともポータブルなら何でもかまいません)

2、↑を押すと以前選択された文字列が出てきたり、
  選択可能な文字列群を設定すればtabキーで勝手に補完してくれる
  なんちゃってシェルのようなクラスはありませんか?

よろしくお願いします。
0651デフォルトの名無しさん2008/02/15(金) 20:59:46
2番目はreadlineじゃ駄目なのか?
0652デフォルトの名無しさん2008/02/16(土) 00:34:08
>>651
readlineってこういう事に使うライブラリなのですか。
初めて知りました^^

これで全然問題ないです。
どうもありがとうございました。
06536242008/02/16(土) 00:48:57
>>625 さん
返信めちゃくちゃ遅れてすいません。
ご指摘された通り直したら意図した通りに動きました。
ありがとうございましたm(_ _)m
0654デフォルトの名無しさん2008/02/16(土) 01:22:37
>>652
readline はガチガチの GPL なので、代わりにより自由な libedit をお勧めする

http://sourceforge.net/projects/libedit/
0655デフォルトの名無しさん2008/02/16(土) 09:51:47
>>654
自分も探しましたよ。ストールマンの呪縛から逃れるために^^

そこのlibeditの最終リリースが2001年8月だったので
何じゃコリャと思ってしまったのですが、
Googleで探してみるとちゃんと新しいのもあるみたいですね。
ただ、マルチバイトが使えない&直すのは難しくないが「需要がない」
という内容のMLを見たときは少しびっくりしました。
0656デフォルトの名無しさん2008/02/16(土) 12:28:10
たしかにコンソールで日本語打ちたいと思うケースはあまりない
0657デフォルトの名無しさん2008/02/16(土) 13:05:57
> cd C:¥デスクトップ¥夏休みの宿題¥プロジェクト1¥宇宙シミュレータ
> bigbang.exe 初期値1.xls > 結果1.xls
0658デフォルトの名無しさん2008/02/16(土) 13:46:08
後々ターミナルからアクセスすることを考えると日本語ファイル名は打つのめんどくさいから付けない
0659デフォルトの名無しさん2008/02/16(土) 13:48:26
ubuntuの「デスクトップ」をどうにかしてください
0660デフォルトの名無しさん2008/02/16(土) 13:58:16
>>658
自分で作らなくても、仕事だと嫌ほど受け取る。
0661デフォルトの名無しさん2008/02/16(土) 14:52:22
>>655
あとは Tecla というのもあるよ
マルチバイトが使えるかは知らないけど…

http://www.astro.caltech.edu/~mcs/tecla/
0662デフォルトの名無しさん2008/02/16(土) 23:17:58
>>659
ディレクトリ名書き換えれたけど
0663デフォルトの名無しさん2008/02/17(日) 02:32:40
2.8.7リリースされてるけど最近は流行ってないの?

てかスレ違い?
0664デフォルトの名無しさん2008/02/17(日) 02:33:33
ごめん微妙に誤爆
0665デフォルトの名無しさん2008/02/17(日) 04:03:32
というか、流行ってた頃ってあったの?
0666デフォルトの名無しさん2008/02/17(日) 15:01:23
気づかずにお世話になってる人はいると思うがね
vlcとか
0667デフォルトの名無しさん2008/02/17(日) 21:57:27
vlcねぇ〜
あれってなんであんなにバイナリのサイズが小さいの?
VCとかで作ってるとどんなに気を使ってもMBサイズの大きさになってしまう・・・
0668デフォルトの名無しさん2008/02/17(日) 22:01:05
libwxwidgets_plugin.dll
2.66 MB (2,793,984 bytes)

こういうカラクリ
0669デフォルトの名無しさん2008/02/17(日) 23:55:57
あー、もしかしてライブラリをビルドするときにDLLでビルドすればいいのか
納得しました
0670デフォルトの名無しさん2008/02/18(月) 02:15:57
実行ファイルさえ小さければDLLが多少でかくてもそんなに文句は出ないという
意外と盲点かもしれないね
■ このスレッドは過去ログ倉庫に格納されています