- ベストアンサー
wxPythonのファイル参照ダイアログの使い方を教えてください
- BASICやCを主に利用してきたため、wxPythonのオブジェクト指向に慣れていません。ボタンをクリックしてファイル参照ダイアログを表示し、選択したファイルのフルパスをエディットボックスに表示したいです。
- 現在、wxPythonを学習中ですが、オブジェクト指向の理解ができずに苦戦しています。具体的には、ボタンをクリックするとファイル参照ダイアログが表示され、選択したファイルのフルパスをエディットボックスに表示したいです。
- wxPythonを研究するために勉強しているのですが、オブジェクト指向が分からずに困っています。ボタンをクリックするとファイル参照ダイアログが表示され、選択したファイルのフルパスをエディットボックスに表示する方法を教えていただきたいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
そうか、基本的なところからわかってないんだなぁ。 Pythonには今のところPython2系列とPython3系列があって、 この両者は文法が少し違う。 今はこの2つが並存している時期なので注意が必要。 Python2とPython3ではモジュールの作り方も違うので、 まだPython3に対応していないモジュールとかライブラリもある。 wxPythonはまだPython3の安定リリースが出ていないから たぶん君が使ってるのはPython2だ。 確かめるにはコンソールから python -V とやる。 もし Python 2.7.6 とか出てきたらPython2系列だ。 MeCabは使ったことがないので、 wxPythonと競合するかどうかはわかない。 もちろん、単体で import MeCab してみて動くことを確認したんだよね? (してなかったら、私は呆れるっすよ。) もしそうなら、私の手には負えないので 新しく質問を作ったほうがいいです。 > とりあえず、文法的には > app = wx.App(redirect=False) > と > app.MainLoop() > の間にイベントを書けばいいのでしょうか。 > そう解釈しております(Cで言うプロトタイプ宣言的な?) うーん、まー、基本的にはそうなるんだけど、 Pythonにはプロタイプ宣言がない。 というか宣言自体がない。 ソースコードを一行一行、上から実行していって、 変数やら関数が出てきたら 「その場で」変数や関数を作っている [*]。 作る前から参照はできない。 だからグローバル変数に依存しているような関数は 自由な場所に置けなくなる。 これがスパゲッティ化する理由。 > オブジェクト指向勉強すべきかなぁ…… wxPythonのサンプルコードはほぼ全てクラスを使って書かれているので、 継承とか知らないと厳しいかも。 [*] 正確にはソースコードを実行する前にバイトコードにコンパイルしているので、 どんな変数や関数があるのかは実行する前にわかっている。 でも実際の関数が作られるのは def が出てきた場所になるので、 それ以前の行から関数を参照することはできない。
その他の回答 (5)
- Tacosan
- ベストアンサー率23% (3656/15482)
非常に残念なことに, 安定版の wxPython は 32ビットものしか用意されていないようです.
お礼
ご回答有難うございました。 あー……やっぱり対応していませんか…… 取り敢えず、他のGUIツールを探してみます。 pygletが文法的にも馴染みやすいかなぁと思ってみたり
- Tacosan
- ベストアンサー率23% (3656/15482)
かなり「いまさら」感はあるし私自身 Python は全くダメ (どうも「ネストをインデントで表す」のが体質に合わない) なんですが 1つだけ: 「wxとMeCabをimportするとすごくエラーが出る」ということですが, 具体的に ・どんなプログラムに対して ・どんなエラーが出ているのか を書いた方が識者の意見を得やすいと思いますよ. 少なくとも ・wx と MeCab との相性が悪い のか, それとも ・ただ単にあなたの書いたプログラムが悪い のかは (分かる人なら) 判断できそうな気がしますし.
- wetti
- ベストアンサー率66% (2/3)
No.2 > 実行方法によるもので「エラーメッセージが読めない」だけでは? コンソールから実行しても読めないって。 WindowsかMacだと、wx.App() を実行した時点で、 sys.stderr が独自の画面にリダイレクトされるようになるから MainLoop() 以前のエラー表示は一瞬で終わる。 こうならないように wx.App(redirect=False) としてある。
お礼
wettiさん ご回答有難うございます。 やりたい事が出来ました。 まず、バージョンと環境の件について。 申し訳ありません、完全に失念しておりました。 一応いまさらですが、Macintoshのスノウレパードでやっていました。 pythonのバージョンは……最近入れたので3でしょうか? とりあえず突っ込んでみた感じですね。 次に、wxpythonとtkinterについて。 そもそもpythonと言うもの自体初で、教授に使えと言われたので勉強を始めました。 2週間後にはこれをまとめて論文ですよ。 tkinterというものは初めて聞きます。(と、いうよりwxpythonもたまたま教授が言ったのでそのまま使ってるだけですが……) 使い勝手がいいならそれを使いたいですね。とりあえず形態素解析のプログラムをGUI化するというところです。 最後に完全に関係無いですが、Codepadと言うサイトを初めて知り、すごく感動しております。 むしろこれの存在を教授して頂いて本当にありがたいです。 質問するか悩んでいたのですが、思い切って質問してよかったと思います。聞くは一時の恥聞かぬは一生の恥…っと。 とりあえず、文法的には app = wx.App(redirect=False) と app.MainLoop() の間にイベントを書けばいいのでしょうか。 そう解釈しております(Cで言うプロトタイプ宣言的な?) 出来ればスパゲッティは避けたいですね……オブジェクト指向勉強すべきかなぁ……
補足
すいません、もう一つ。 wxとMeCabをimportするとすごくエラーが出るのですが、 wxpythonとMeCabは同時に扱うことが出来ないのでしょうか。
- kmee
- ベストアンサー率55% (1857/3366)
ここって「空白をまとめる」という仕様のせいで、Pythonの質問には致命的なんです。 > 症状としては、エラーを吐かずにすぐにプログラムが終了してしまうという状況です エラーは出るはずです。 実行方法によるもので「エラーメッセージが読めない」だけでは? (Windowsでダブルクリック→エラー表示してすぐ終了するので、メッセージを読む時間が無い、とか)
お礼
kmeeさん ご回答有難うございます。 wettiさんの仰る通り、エラーを吐かずに一瞬で終了していました。 >ここって「空白をまとめる」という仕様のせいで、Pythonの質問には致命的なんです。 そうですね、とりあえず必要部分だけ抜き出したので今回はまだましだったかなと思います。 codepadを以降使わせていただきたいと思います
- wetti
- ベストアンサー率66% (2/3)
オブジェクト指向は使わなくても書けるっす。 http://codepad.org/ywov67Fk ただし、ソースコードが激しくスパゲッティ化するけどね。 それから、この程度の内容であれば wxPythonじゃなくてtkinterでもいいような気がする。 GUIライブラリが鎬を削るPython界において、 Python3対応の遅れているwxPythonは今後もずっと使えるかどうか不安なんすよ。 あと、プログラミングの質問をするときは、 使用しているインタープリタやらライブラリやらのバージョンと、 OSの種類をきちんと書いてください。 OSやバージョンによって書き方や説明が違う場合もあるし、 それらをいちいち調べて回るのも面倒なんで。
お礼
ご回答有難うございます。 >Pythonには今のところPython2系列とPython3系列があって、この両者は文法が少し違う。 互換性的なものがないんですね……まだまだ勉強し始めで全く分かってません。 Python 2.7.6でした。 >もちろん、単体で import MeCab してみて動くことを確認したんだよね? まー、さすがにこれでもプログラマの端くれくらいまでにはなってきてると思うので、やってますね。 コンソールでMeCabを使って形態素解析のスクリプトは組んで、実行と結果が結びついている状態で、それをwxPythonの方に移動させると起動エラーが出る。 で、いろいろ実験した結果なのですが、 ・wxPythonは32bit環境で動作する ということなので、 ・$ arch -i386 python text.py こんな感じで起動させてるのですよ。(調べて出てきたコマンドなので何してるかは分かりませんが、32bitで起動させてるんでしょうね) そしておそらくMeCabさんは64bitで起動すると…… この辺りの問題だと踏んでいます。 MeCabに32bit用があったかなぁ…… wxPythonに64bitで起動出来る方法ってありますでしょうか……?