46

Python3でプログラムの参照ボタンをコーディングすることに初めて取り組んでいます。私はインターネットとこのサイト、さらにはpython標準ライブラリを検索してきました。

サンプルコードと非常に表面的な説明を見つけましたが、直接抱えている問題に対処するものや、必要に応じてコードをカスタマイズできる十分な説明を見つけることができませんでした。

関連するスニペットは次のとおりです。

Button(self, text = "Browse", command = self.load_file, width = 10)\
        .grid(row = 1, column = 0, sticky = W) .....


 def load_file(self):

    filename = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
                                                         ,("HTML files", "*.html;*.htm")
                                                         ,("All files", "*.*") ))
    if filename: 
        try: 
            self.settings["template"].set(filename)
        except: 
            messagebox.showerror("Open Source File", "Failed to read file \n'%s'"%filename)
            return

この方法は、私が途中で見つけたいくつかのコードと、私自身のカスタマイズのハイブリッドです。私はそれを最終的に機能させたようです(ちょっと)、それは私がそれを必要とする方法ではありませんが。

[参照]ボタンをアクティブにすると、次のエラーが発生しますNameError: global name 'filedialog' is not defined

私は途中でかなり類似した問題を見つけましたが、すべての解決策は私がカバーしたことを示唆しました。IDLEの「filedialog」ヘルプセクションに移動しましたが、そこからも何も収集しませんでした。

誰かがこれについての内訳と少しのガイダンスを提供してくれませんか。私の本のどれもそれを具体的に扱っていません、そして私は他の人に提供されたすべての解決策をチェックしました—私は迷子になっています。

4

4 に答える 4

66

あなたが得る例外はあなたfiledialogがあなたの名前空間にいないことを告げることです。 filedialog(およびbtw messagebox)はtkinterモジュールであるため、from tkinter import *

>>> from tkinter import *
>>> filedialog
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'filedialog' is not defined
>>> 

たとえば、次のように使用する必要があります。

>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Python32\lib\tkinter\filedialog.py'>
>>>

また

>>> import tkinter.filedialog as fdialog

また

>>> from tkinter.filedialog import askopenfilename

したがって、これは参照ボタンに役立ちます。

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror

class MyFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("Example")
        self.master.rowconfigure(5, weight=1)
        self.master.columnconfigure(5, weight=1)
        self.grid(sticky=W+E+N+S)

        self.button = Button(self, text="Browse", command=self.load_file, width=10)
        self.button.grid(row=1, column=0, sticky=W)

    def load_file(self):
        fname = askopenfilename(filetypes=(("Template files", "*.tplate"),
                                           ("HTML files", "*.html;*.htm"),
                                           ("All files", "*.*") ))
        if fname:
            try:
                print("""here it comes: self.settings["template"].set(fname)""")
            except:                     # <- naked except is a bad idea
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)
            return


if __name__ == "__main__":
    MyFrame().mainloop()

ここに画像の説明を入力してください

于 2012-02-11T11:14:39.670 に答える
3

最初に個々のコマンドを指定してから、を使用*してすべてをコマンドに取り込む必要がありました。

from tkinter import filedialog
from tkinter import *
于 2015-09-17T12:54:44.407 に答える
2

fileNameに自己プレフィックスを追加し、ボタンの上のメソッドを置き換えてみましたか?自己で、それはメソッド間で見えるようになります。

...

def load_file(self):
    self.fileName = filedialog.askopenfilename(filetypes = (("Template files", "*.tplate")
                                                     ,("HTML files", "*.html;*.htm")
                                                     ,("All files", "*.*") ))
...
于 2012-02-11T10:52:03.070 に答える
0

Tkinterは、実際にはpythonパッケージ、またはpythonファイルのフォルダーです。Pythonソースをチェックして見つけてください。「tkinter.filedialog」は「tkinter.messagebox」の一部です「fromtkinter.messageboximportfiledialog」を試してfiledialog[python3.7]を取得してください。

于 2021-07-06T20:38:17.230 に答える