私は自分のプログラムに非常に多くのメソッドを用意することを計画しているので、これらを外部ファイルに実装し、ファイルをインポートした後にメニュー コマンドに追加する必要があります。しかし、メニュー コマンドはメソッドの名前しかとらないので、私のメソッドがパラメーターを受け取る場合に機能するかどうかはわかりません。以下は、file.py という名前のファイルに画像を表示するためのコードです。
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image, ImageTk
def open(root):
filename = askopenfilename(filetypes=[("all files","*"),("Bitmap Files","*.bmp; *.dib"),
("JPEG", "*.jpg; *.jpe; *.jpeg; *.jfif"),
("PNG", "*.png"), ("TIFF", "*.tiff; *.tif")])
image = Image.open(filename)
image1 = ImageTk.PhotoImage(open(filename))
root.geometry("%dx%d+%d+%d" % (image.size[0], image.size[1], 0, 0))
panel = Label(root, image = image1)
panel.pack(side='top', fill='both', expand='yes')
panel.image = image1
gui.py という名前のファイルもあり、コマンドで上記のメソッド open を呼び出します。だから私はこれをしました:
menu.add_command(label="Open", command=file.open)
私の考えは、メニューと同じウィンドウに画像を表示することです。そのため、open メソッドはパラメータ ルートを取得する必要があると思います。そのため、メニューで呼び出されると、そのウィンドウで画像が開かれます。それがロジックかどうかはわかりませんが、ここに私が得たエラーがあります:
Tkinter コールバック Traceback の例外 (最新の呼び出しは最後):
ファイル "D:\Python32\lib\tkinter__init__.py"、1399 行目、呼び出しで return self.func(*args) TypeError: open() は正確に 1 つの引数を取ります (0与えられた)
私はPythonが初めてで、私の質問は少し面倒ですが、本当に助けが必要です. ありがとう。
編集:
バインディングについてのコメントをありがとうございます。修正方法はわかりませんが、メニュー コマンドとして呼び出される open メソッドにパラメータを追加すると、メソッドがコマンドに割り当てられるのではなく呼び出されることを除いて機能します。メソッドの名前だけを呼び出して、パラメータを含めるにはどうすればよいですか? これは私にとって奇妙です。