私はプログラミングとPythonの初心者です。最初のスクリプトを開発したところです。ファイルを処理しますが、現時点ではコマンドラインからのみです。
これは私の趣味なので、私の仕事はそれに依存していません :-)
私は数日間、python gui 開発に頭を悩ませようとしてきましたが、私は愚かであるに違いないという結論に達しました。
私は wxpython と Tkinter を見てきましたが、どちらも理解していませんが、Tkinter は 2 つのうちのほうが簡単なようです。Boa Contrictor や wxglade などの wysiwyg ツールも調べました。それらの使い方もわかりません。とにかく、エディターとコードを手動で使い続けることを好みます。
私の問題はこれです:
最適なものに応じて、1 つまたは 2 つのオブジェクトを含むデスクトップ ウィンドウを作成したいと考えています。オブジェクトが 1 つだけの場合は何らかのテキスト ボックス、オブジェクトが 2 つの場合はテキスト ボックスと画像です。
ファイルマネージャーからファイルをドラッグしてスクリプトウィンドウにドロップできるようにしたいのですが、これはファイル名をスクリプトに渡すだけです。
すべてのスクリプト出力がデスクトップ ウィンドウ内に表示されるように、stdout をデスクトップ ウィンドウ内のオブジェクトにリダイレクトしたいと考えています。
1 つのオブジェクトで両方のことができるかどうかはわかりません。テキストボックスだけで十分な場合は、ファイルを画像にドロップし、出力をテキストボックスにリダイレクトします。
Web でドラッグ アンド ドロップの例を見つけましたが、stdout リダイレクトを組み込んだものは何もありませんでした。
親切な唯一の人が、私が望むものを達成する方法を示し、その仕組みを説明する時間があれば、私はそれを大いに感謝します.
- - 編集 - -
私は2つの例で遊んでいて、2つを一緒にハッシュして、私が望んでいたものを機能させました。コードは以下です。まだクリーンアップされていません (古いコメントなど...) が、動作します。
#!/usr/bin/python
# The next two lines are not necessary if you installed TkDnd
# in a proper place.
import os
from Tkinter import *
os.environ['TKDND_LIBRARY'] = '/home/clinton/Python/tkdnd2.6/'
import Tkinter
from untested_tkdnd_wrapper import TkDND
class Redir(object):
# This is what we're using for the redirect, it needs a text box
def __init__(self, textbox):
self.textbox = textbox
self.textbox.config(state=NORMAL)
self.fileno = sys.stdout.fileno
def write(self, message):
# When you set this up as redirect it needs a write method as the
# stdin/out will be looking to write to somewhere!
self.textbox.insert(END, str(message))
root = Tkinter.Tk()
dnd = TkDND(root)
textbox = Tkinter.Text()
textbox.pack()
def handle(event):
event.widget.insert(END, event.data)
content = textbox.get("0.0",Tkinter.END)
filename = content.split()
dnd.bindtarget(textbox, handle, 'text/uri-list')
#Set up the redirect
stdre = Redir(textbox)
# Redirect stdout, stdout is where the standard messages are ouput
sys.stdout = stdre
# Redirect stderr, stderr is where the errors are printed too!
sys.stderr = stdre
# Print hello so we can see the redirect is working!
print "hello"
# Start the application mainloop
root.mainloop()
例: python エクスプローラー ファイルを tkinter エントリ ウィジェットにドラッグ アンド ドロップする
また、Noelkd から親切に提供された例もあります。
このコードを機能させるには、最初の例のラッパーを作成する必要があります。また、現在、コードはドラッグされたファイルをウィンドウに表示するだけですが、変数は GUI インターフェイスの背後で実行されるスクリプトに渡されます。